WA60分求助
查看原帖
WA60分求助
1037553
forelsket楼主2023/8/18 16:43
#include<bits/stdc++.h>
using namespace std;

int const N=5e4+5;
int const K=1e5+5;
int n,k;
int fa[N*3];
int ans;

struct node{
	int u,v,w;
}a[K];

int find(int x){
	return fa[x]==x?x:fa[x]=find(fa[x]);
}

void Union(int x,int y){
	int rx=find(x);
	int ry=find(y);
	if(rx==ry) return;
	fa[rx]=ry;
}

int main(){
	freopen("06.txt","r",stdin);
	cin >> n >> k;
	
	for(int i=1;i<=3*n;i++) fa[i]=i;
	
	int op,x,y;
	int rx,ry;
	for(int i=1;i<=k;i++){
		cin >> op >> x >> y;
		switch(op){
			case 1:
				if(find(fa[x+n])==find(fa[y]) ||
				find(fa[x])==find(fa[y+n])) ans++;
				else {
					Union(fa[x],fa[y]);
					Union(fa[x+n],fa[y+n]);
					Union(fa[x+2*n],fa[y+2*n]);
				}
				break;
			case 2:

				if(find(fa[x])==find(fa[y]) || 
				find(fa[x])==find(fa[y+n])) ans++;
				else {
					Union(fa[x+n],fa[y]);
					Union(fa[x],fa[y+2*n]);
					Union(fa[x+2*n],fa[y+n]);
				}
				break;
		}
	}
	cout << ans;
}
2023/8/18 16:43
加载中...