一道ACM问题,求解
说明考点,给出详细代码,表明注释
最好是用C语言(C++)也行
#include <stdio.h>
#define MAXN 100005
int n;
int head[MAXN], nxt[MAXN], to[MAXN], cnt;
int vis[MAXN], flag[MAXN];
void add(int u, int v) {
nxt[++cnt] = head[u];
head[u] = cnt;
to[cnt] = v;
}
int dfs(int u, int fa) {
vis[u] = 1;
for (int i = head[u]; i; i = nxt[i]) {
int v = to[i];
if (v == fa) continue;
if (vis[v]) {
flag[u] = 1;
return v;
}
int res = dfs(v, u);
if (res) {
flag[u] = 1;
if (res == u) return 0;
else return res;
}
}
return 0;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int u, v;
scanf("%d%d", &u, &v);
add(u, v);
add(v, u);
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
int res = dfs(i, 0);
if (res) ans++;
}
}
for (int i = 1; i <= n; i++) {
if (flag[i]) ans++;
}
printf("%d\n", ans);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",a+b);
}
return 0;
}
~的作用是“按位取反”。
scanf函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2,如果只有a被成功读入,返回值为1。
如果没有输入值就是返回-1,-1按位取反结果是0。