给定一张无向图,有N个点,M条边,第i条边连接 u[i]和v[i]。
请你判断这个图是否为一条链。
首先判断有无重边或自环
其次把每个点连接的点数记下来,判断是不是有两个末端的只连接一个点,剩下n-2个点连接两边两个点。
#include <bits/stdc++.h>
using namespace std;
int a[200011];
set <pair <int , int> > se;
int main(){
int n , m;
cin >> n >> m;
for(int i = 0;i < m;i++){
int b , c;
cin >> b >> c;
if(b < c) swap(b , c);
if(b == c){
cout << "No\n";
return 0;
}
if(se.count({b , c})){
cout << "No\n";
return 0;
}
se.insert({b , c});
a[b]++;
a[c]++;
}
int cnt1 = 0;
int cnt2 = 0;
for(int i = 1;i <= n;i++){
if(a[i] == 1) cnt1++;
if(a[i] == 2) cnt2++;
}
cout << ((cnt1 == 2 && cnt2 == n - 2)? "Yes\n" : "No\n");
return 0;
}
麻烦大佬们帮忙找找反例,或是找出方法的漏洞,谢谢!