直接连通图里的环判断有没有,有就是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

京公网安备 11010502036488号