30分求助
查看原帖
30分求助
705170
longtong楼主2022/11/17 09:01
#include<bits/stdc++.h>
using namespace std;

int n,m,p,e;
int Ufind[100005];
struct une{
	int aa,bb;
}dyh[100005];

int Find(int x)
{
	if(x!=Ufind[x])
		Ufind[x]=Find(Ufind[x]);
	return Ufind[x];
}

void Union(int x,int y)
{
	int a=Find(x);
	int b=Find(y);
	if(a!=b)
	{
		Ufind[b]=a;
	}
}

int main()
{
		int ans=0,k;
		int sum=0 ;
		cin>>n>>k;
		for(int i=1;i<=100005;i++)
			Ufind[i]=i;
		for(int i=1;i<=k;i++)
		{
			int xd,yd;
			cin>>e>>xd>>yd;
			if(xd>n||yd>n)
				{
					ans++;
					continue; 
				}
			if(e==1)
			{
				Union(xd,yd);
			}
			else if(e==2)
			{
				if(xd==yd)
				{
					ans++;
				}
				else
				{
					dyh[++sum].aa=xd;
					dyh[sum].bb=yd;
				}
			}
		}
		for(int i=1;i<=sum;i++)
		{
			if(Find(dyh[i].aa)==Find(dyh[i].bb))
			{
				ans++;
			}
				
		}
		cout<<ans<<endl;
		
	return 0;
}
2022/11/17 09:01
加载中...