3 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int maxn=1000005; int fa[maxn]; int n,k,ans;
int find(int x){ if(x==fa[x]) return x; return fa[x]=find(fa[x]); }
void merge(int x,int y){ int fx=find(x),fy=find(y); if(fx!=fy) fa[fx]=fy; }
int main(){ cin>>n>>k; for(int i=1;i<=3n;i++) fa[i]=i; for(int i=1;i<=k;i++){ int op,x,y; cin>>op>>x>>y; if(x>n||y>n){ ans++; continue; } if(op2&&xy){ ans++; continue; } if(op==1){ if(find(x)==find(y+n)||find(x)==find(y+2n)){ ans++; }else{ merge(x,y); merge(x+n,y+n); merge(x+2n,y+2n); } }else{ if(find(x)==find(y)||find(x)==find(y+2n)){ ans++; }else{ merge(x,y+n); merge(x+n,y+2n); merge(x+2*n,y); } } } cout<<ans; return 0; }
Information
- ID
- 5410
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 4
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By