[ABC287C] Path Graph?
[ABC287C] Path Graph?
题目大意:给你一张无向图,问你是不是链。
显然,如果一个图是链,必然满足有两个点(端点)度数为 ,其他点度数为 。
但是这样上去是有问题的。
因为这个图不一定连通。
所以我们考虑先判断联通,在考虑是不是链。
做法是,我们就随便找一个点,往两边去遍历,如果能遍历到全部点,那就是连通的。
复杂度为 ,爆锤并查集做法。
#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int total[N],vis[N];
vector<int> g[N<<1];
int p;
void dfs(int u)
{
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(vis[v]==1)
continue;
p++;
vis[v]=true;
dfs(v);
}
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1,u,v;i<=m;i++)
cin>>u>>v,g[u].push_back(v),g[v].push_back(u),total[u]++,total[v]++;
dfs(1);
if(p!=n)
cout<<"No"<<endl,exit(0);
int sum=0,ans=0;
for(int i=1;i<=n;i++)
{
if(total[i]==1)
sum++;
if(total[i]==2)
ans++;
}
if(sum==2&&ans==n-2)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}