萌星球调
查看原帖
萌星球调
517086
EthanC_楼主2022/4/25 21:18

rt,样例卡在4,不知道怎么改了

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
const int N=10000+5;
int f[3*N];
int find(int x){
    if(f[x]!=x)
        f[x]=find(f[x]);
    return f[x];
}
void un(int x,int y){
    x=find(x);
    y=find(y);
    if(x!=y)f[y]=x;
}
bool same(int x,int y){
    return find(x)==find(y);
}
int main(){
    ans=0;
    cin>>n>>k;
    for(int i=1;i<=3*n;++i)f[i]=i;
    for(int i=0,a,x,y;i<k;++i){
        cin>>a>>x>>y;
        if(x>n||y>n){
            ans++;
            continue;
        }
        if(a==1){
            if(same(x,y))
                ans++;
            else{
                un(x,y);
                un(x+n,y+n);
                un(x+2*n,y+2*n);
            }
        }
        else if(a==2){
            if(same(x,y)||same(x,y+n))
                ans++;
            else{
                un(x,y+n);
                un(x+n,y+2*n);
                un(x+2*n,y);
            } 
        }
    }
    cout<<ans<<endl;
    return 0;
}
2022/4/25 21:18
加载中...