Bear and Friendship Condition CodeForces - 771A

题目来源:http://codeforces.com/problemset/problem/771/A

并查集。

比方1时2的朋友,2是3的朋友,判断1是不是3的朋友。引入完全图的概念,要构成完全图,C(n,2)(组合数学),n个点中两两都要有边,即n*(n-1)/2,而且对于有关系的x个人,要有x*(x-1)/2个关系构成完全图,判断他们是否等于m。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int b[150010];
ll t[150010];
int find(ll v)
{
	return b[v]==v ? v: b[v]=find(b[v]);
}
void merge(ll v,ll u)
{
	ll t1,t2;
	t1=find(v);
	t2=find(u);
	if(t1!=t2)
	{
		b[t2]=t1;
	}
}
int main()
{
	int n,m,i,j,x,y;
	memset(t,0,sizeof(t));
	for(i=0;i<150010;i++)
	b[i]=i;
	cin>>n>>m;
	for(i=0;i<m;i++)
	{
		cin>>x>>y;
		merge(x,y);
	}
	for(i=1;i<=n;i++)
	{
		t[find(i)]++;
	}
	ll sum=0;
	for(i=1;i<=n;i++)
	{
		 if(t[i]!=0&&t[i]!=1)//直接就是0了
		{
           sum+=(t[i]*(t[i]-1)/2);
        }
	}
	if(sum!=m)
        printf("NO");
    else
        printf("YES");
	return 0;
} 
发布了56 篇原创文章 · 获赞 17 · 访问量 2349

猜你喜欢

转载自blog.csdn.net/weixin_43958964/article/details/98452834