10分求助
查看原帖
10分求助
675860
zwm999楼主2022/5/8 11:46

代码:

#include<bits/stdc++.h>
using namespace std;
int fa[2000001];
//fa[i]同类
//fa[i+n]食物 
//fa[i+n+n]天敌 
int find(int x){
	while(x!=fa[x]){
		x=fa[x];
	}
	return x;
}
void uin(int x,int y){
	fa[find(y)]=find(x);
}
int main(){
	int n,m;
    int p;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		fa[i]=i;
		fa[i+n]=i;
		fa[i+n+n]=i;
	}
	int ans=0;
	int x,y;
	for(int i=1;i<=m;i++){
		cin>>p>>x>>y;
		if(x>n||y>n){
			ans++;
//			cout<<1<<endl;
			continue;
		}
		if(p==2){
			if(x==y){
				ans++;
//				cout<<1<<endl;
				continue;
			}
			if(find(x) == find(y) || find(x) == find(y + n)){
//				cout<<find(x)<<" "<<find(y)<<" "<<find(y+n)<<endl;
//				cout<<2<<endl;
				ans++;
				continue;
			}
			uin(x,y+n+n);
			uin(x+n,y);
			uin(x+n+n,y+n);
		}
        if(p==1){
        	if(x==y){
//        		cout<<0<<endl;
        		continue;
			}
        	if(find(x+n)==find(y)||find(y+n)==find(x)){
				ans++;
//				cout<<2<<endl;
				continue;
			} 
        	uin(x,y);
        	uin(x+n,y+n);
        	uin(x+n+n,y+n+n);
        	
		}
//		cout<<0<<endl;
		
	}
    
	
    cout<<ans;
    return 0;
}

十分,求大佬指点

2022/5/8 11:46
加载中...