求助各位大佬
查看原帖
求助各位大佬
921236
wyd_is_JOKER楼主2023/12/2 21:13
#include<bits/stdc++.h>
using namespace std;
const int M=50005;
int f[M],dis[M];
int m,n;
int find(int x){
	if(f[x]!=x){
		int y=f[x];
		f[x]=find(f[x]);
		dis[x]=(dis[x]+dis[y])%3;
	}
	return f[x];
}
int main(){
	int res=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		f[i]=i;
		dis[i]=0;
	}
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		if(b>n || c>n){
			res++;
			continue;
		}
		if(a==1){
			if(b==c){
				continue;
			}
			int u=find(b),v=find(c);
			if(u==v){
				if(dis[b]!=dis[c]){
					res++;
				}
				else{
					dis[v]=3-dis[c];
					f[v]=b;
				}
			}
		}
		else{
			if(b==c){
				res++;
				continue;
			}
			int u=find(b),v=find(c);
			if(u==v){
				if((dis[b]-dis[c]+3)%3!=2){
					res++;
				}
			}
			else{
				dis[v]=(1-dis[c]+3)%3;
				f[v]=b;
			}
		}
	}
	printf("%d\n",res);
	return 0;
}
2023/12/2 21:13
加载中...