30分求助qwq
查看原帖
30分求助qwq
407223
TulipeNoire楼主2021/7/19 21:02
#include<bits/stdc++.h>
using namespace std;
int n,m,d,x,y,ans,tot=1,fa[150005];
int find(int a) {
    if (fa[a] == a)
        return a;
    fa[a] = find(fa[a]);
    return fa[a];
}
void merge(int a,int b) {
	int A=find(a);
	int B=find(b);
	fa[A]=B;
	return;
}
int main() {
	scanf("%d %d",&n,&m);
	for (int i=1;i<=n;i++) fa[i]=i,fa[i+n]=i+n,fa[i+2*n]=i+2*n;
	for (int i=1;i<=m;i++) {
		scanf("%d %d %d",&d,&x,&y);
		if (x>n||y>n||x<0||y<0) ans++;
		else if (d==1) {
			if (find(x)==find(y+2*n)||find(x)==find(y+n)) ans++;
			else merge(x,y),merge(x+n,y+n),merge(x+2*n,y+2*n);
		} else {
			if (find(x)==find(y+2*n)||find(x)==find(y)) ans++;
			else merge(x,y+n),merge(x+n,y+2*n),merge(x+2*n,y);
		}
	}
	printf("%d",ans);
	return 0;
} 
2021/7/19 21:02
加载中...