提交时间:2023-02-03 14:58:15
运行 ID: 68222
#include<bits/stdc++.h> using namespace std; int p[1010]; int find(int x){ if(p[x]!=x) p[x]=find(p[x]); return p[x]; } int main(){ int n,m; while(scanf("%d%d",&n,&m), n||m){ memset(p,-1,sizeof p); int flag=0,cnt=0; for(int i=1;i<=n;i++) p[i]=i; // 并查集的初始化 while(m--){ int a,b; cin>>a>>b; int pa=find(a),pb=find(b); if(pa!=pb) p[pa]=pb; else flag=1; // 出现环 } // 判断是否有多个集合,如果cnt==1只有一个集合 for(int i=1;i<=n;i++){ if(p[i]==i) cnt++; } if(flag || cnt>1) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; }