大家帮忙看看是a的判断条件错了嘛
查看原帖
大家帮忙看看是a的判断条件错了嘛
668320
fufuQAQ楼主2022/4/15 20:35
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,m,a,b,c,ans=0,cnt=0;
int fa[N];
map <string,int> mp; 

int find(int x)//找x的根节点 
{
	if(x == fa[x])  return x;
	else  return   fa[x] = find(fa[x]);
}

void merge(int x,int y)
{
	fa[find(x)] = find(y);//找到y的根节点和x的根节点,并把它连起来 
}


int main()
{
	cin>>n>>m;
	for(int i=1;i<=3*n;i++)
	    fa[i]=i;
	while(m--)
	{
		cin>>a>>b>>c;
        cout<<1<<" "<<ans<<endl; 
        
		if(b>n || c>n)
		{
			ans++;
			continue;
		}
		
		if(a==1)
		{
			if((find(b) == find(c)) || (find(b+n) == find(c+n)) || (find(b+2*n) == find(c+2*n)))
			{
			    merge(b,c);
			    merge(b+n,c+n);
			    merge(b+2*n,c+2*n);
			}
			else ans++;
		} 
		if(a==2)
		{
			if((find(b) == find(c+n)) || (find(b+n) == find(c+2*n)) || (find(b+2*n) == find(c)))
			{
			    merge(b,c+n);
			    merge(b+n,c+2*n);
			    merge(b+2*n,c);
			}
			else ans++;
		}
		cout<<cnt<<" "<<"ans="<<ans<<endl;
	} 
	cout<<ans<<endl;
	return 0;
}
2022/4/15 20:35
加载中...