Codeforces 103 B —— Cthulhu
作者:互联网
前言
哇塞,太萌了吧!
正文
题面
有一个 $ n $ 个顶点 $ m $ 条边的无向图,问这个图是不是一个环,其中这个环的每一个节点都可以看做一颗树的根。
思路
转换!转换!!转换!!!
首先,假如我们的图是联通的话:
- $ n = m + 1 $,整个图就是一颗无根树。
- $ n = m $,整个图恰好有一个环。
而这题其实就是说,图是否联通并且是否恰好有一个环。
那么,那么就好写了。
代码
Lorem ipsum dolor sit amet...
开个玩笑啦。
#include <bits/stdc++.h>
using namespace std;
int read() {
int f = 0, w = 1; char ch = getchar();
while ('0' > ch || ch > '9') if (ch == '-') w = -1, ch = getchar();
while ('0' <= ch && ch <= '9') f = f * 10 + (ch - '0'), ch = getchar();
return f * w;
}
void write(int x) {
static char stk[35], cnt = 0;
do {
stk[cnt++] = x % 10 + '0', x /= 10;
} while (x);
for (int i = cnt - 1; i >= 0; i--) putchar(stk[i]);
putchar(' ');
}
vector<int> gg[105];
int n, m, cnt = 0;
bool v[105];
void dfs(int x) {
if (v[x]) return;
v[x] = 1, cnt++;
for (auto adj : gg[x]) dfs(adj);
}
int main() {
int n = read(), m = read();
for (int i = 0; i < m; i++) {
int x = read() - 1, y = read() - 1;
gg[x].push_back(y), gg[y].push_back(x);
}
if (n != m) puts("NO");
else {
dfs(0);
if (n != cnt) puts("NO");
else puts("FHTAGN!");
}
return 0;
}
后续
附上蒟蒻的初版代码:
#include <bits/stdc++.h>
using namespace std;
int read() {
int f = 0, w = 1; char ch = getchar();
while ('0' > ch || ch > '9') if (ch == '-') w = -1, ch = getchar();
while ('0' <= ch && ch <= '9') f = f * 10 + (ch - '0'), ch = getchar();
return f * w;
}
void write(int x) {
static char stk[35], cnt = 0;
do {
stk[cnt++] = x % 10 + '0', x /= 10;
} while (x);
for (int i = cnt - 1; i >= 0; i--) putchar(stk[i]);
putchar(' ');
}
vector<int> graph[105];
int vis[105];
int n, m, cycle_cnt = 0;
void dfs(int x, int fa) {
if (vis[x] == -1) {
cycle_cnt++;
return;
} else if (vis[x] == 1) {
return;
} else {
vis[x] = -1;
for (int adj : graph[x]) {
if (adj != fa) {
dfs(adj, x);
}
}
vis[x] = 1;
}
}
int main() {
n = read(), m = read();
for (int i = 0; i < m; i++) {
int x = read(), y = read();
x--, y--;
graph[x].push_back(y);
graph[y].push_back(x);
}
dfs(0, -1);
if (cycle_cnt == 1) {
bool flag = true;
for (int i = 0; i < n; i++) {
flag &= vis[i];
}
if (flag) {
puts("FHTAGN!");
} else {
puts("NO");
}
} else {
puts("NO");
}
return 0;
}
小蒟蒻太蒟蒻了,同学们都快 AK 普及组了,我第三题有时还没法满分……
标签:cnt,ch,puts,vis,int,Codeforces,Cthulhu,read,103 来源: https://www.cnblogs.com/AProblemSolver/p/16589392.html