关于#C语言#的问题,如何解决?

一道ACM问题,求解
说明考点,给出详细代码,表明注释
最好是用C语言(C++)也行

img

#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^