ACM模板——無向圖連通判斷法(或求連通分支個數)
阿新 • • 發佈:2019-01-26
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); #define INF 0x3f3f3f3f using namespace std; typedef long long ll; const int maxn=1010; int n,m; int pre[maxn]; void init() { for(int i=1;i<=n;i++) pre[i]=i; } int find(int x) { return pre[x]==x?x:pre[x]=find(pre[x]); } int main() { while(~scanf("%d%d",&n,&m)) { init(); int u,v; for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); pre[find(u)]=pre[find(v)]; // 合併為同一個根 } int cnt=0; for(int i=1;i<=n;i++) // 統計 root 結點個數 if(pre[i]==i) { cnt++; if(cnt>1) break; } puts(cnt==1?"YES":"NO"); } return 0; }