#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string>
#include <string.h>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
//1109 method2
int T[1010];
void init(int n){
for(int i=1;i<=n;i++){
T[i]=i;
}
}
//查找根并进行路径优化
int findRoot(int x){
if(T[x]==x) return x;
else{
int t=findRoot(T[x]);
T[x]=t;
return t;
}
}
void unio(int a,int b){
if(a!=b)
T[a]=b;
}
int main(){
int n,m;
//freopen("E://PAT/input.txt","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF&&n!=0){
init(n);
while(m--){
int a,b;scanf("%d %d",&a,&b);
a=findRoot(a),b=findRoot(b);
unio(a,b);
}
int cnt=0;
for(int i=1;i<=n;i++)
if(T[i]==i) cnt++;
printf("%s\n",cnt>1?"NO":"YES");
}
}
/**************************************************************
Problem: 1109
User: cust123
Language: C++
Result: Accepted
Time:20 ms
Memory:1524 kb
****************************************************************/
题目1109:连通图
最新推荐文章于 2022-02-28 22:03:29 发布