关于方法的问题
查看原帖
关于方法的问题
389540
imfkwk楼主2021/1/2 14:35

有没有不用3n数组,只开三个表示同类,吃,被吃的数组的方法?我的码只有三十分,还请诸位大佬指出谬误。

#include <bits/stdc++.h>
using namespace std;

int t[50001];
int e[50001];
int b[50001];

int find(int k){
	if(t[k]==k)return k;
	return t[k]=find(t[k]);
}

int n,k;
int z,x,y;
int ans;

int main(void){
	scanf("%d%d",&n,&k);
	
	for(int i=1;i<=n;i++)t[i]=i;
	
	for(int i=1;i<=k;i++){
		scanf("%d%d%d",&z,&x,&y);
		
		if(x>n||y>n){
			ans++;
			continue;
		}
		
		if(z==2){
			if(find(x)==find(y)){
				ans++;
				continue;
			}
			
			else{
				e[find(x)]=find(y);
				b[find(y)]=find(x);
				
				if(e[find(y)]!=0){
					b[find(x)]=e[find(y)];
				}
				
				if(b[find(x)]!=0){
					e[find(y)]=b[find(x)];
				}
			}
		}
		
		else if(z==1){
			if(e[find(x)]==find(y)){
				ans++;
				continue;
			}
			
			else if(b[find(x)]==find(y)){
				ans++;
				continue;
			}
			
			else t[find(x)]=find(y);
		}
	}
	
	cout<<ans;
	return 0;
}```
2021/1/2 14:35
加载中...