直接连通图里的环判断有没有,有就是0,没有就是1.然后判环的方式有很多,我写了dfs,因为自己在练习嘛~挺好写的,只要你把你的想法写进dfs即可.

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;

vector<int>v[N];

int flag=0;
int vis[N];
void dfs(int u,int fa)//判断有没有环.
{
    if(vis[u]) {flag=1;return;}
    vis[u]=1;
    for(int i=0;i<v[u].size();i++)
    {
        if(v[u][i]==fa) continue;
        dfs(v[u][i],u);
    }
}

int main()
{
    int n,m,ans=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int x,y;scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
    for(int i=1;i<=n;i++)//随便选个点当根dfs
    {
        if(!vis[i])
        {
            flag=0;
            dfs(i,0);
            if(!flag)   ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

又是一份简洁的代码orz