题解
2025-08-16 09:58:43
发布于:湖南
3阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,x,y;
}s[3*50005];
int n,k;
int fa[3*50005];
bool cmp(node x,node b){
return x.a<b.a;
}
int find(int x){
return fa[x] == x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y){
int r1 = find(x),r2 = find(y);
if(r1 == r2){
return;
}
fa[r1] = r2;
}
int main(){
int cnt=0;
cin>>n>>k;
for(int i=1;i<=k;i++){
cin>>s[i].a>>s[i].x>>s[i].y;
}
for(int i=1;i<=3*n;i++)fa[i] = i;
for(int i=1;i<=k;i++){
if(s[i].x>n||s[i].y>n){
cnt++;
continue;
}
if(s[i].a==1){
if(find(s[i].x+n)==find(s[i].y)||find(s[i].y+n)==find(s[i].x)){
cnt++;
}else{
fa[find(s[i].x)] = find(s[i].y);
fa[find(s[i].x+n)] =find(s[i].y+n);
fa[find(s[i].x+n+n)] =find(s[i].y+n+n);
}
}else{
if(find(s[i].x)==find(s[i].y)||find(s[i].x)==find(s[i].y+n))cnt++;
else{
fa[find(s[i].x+n)] = find(s[i].y);
fa[find(s[i].x+n+n)] = find(s[i].y+n);
fa[find(s[i].x)] = find(s[i].y+n+n);
}
}
}
cout<<cnt;
return 0;
}
这里空空如也
有帮助,赞一个