拿了20分,剩下TLE和WA
#include <bits/stdc++.h>
using namespace std;
int fa[100001],d[100001];
int find(int x){
int r=x;
while(fa[r]!=r){
r=fa[r];
}/*
while(x!=r){
int t=x;
x=fa[x];
fa[t]=r;
}*/
return r;
}
int calc(int x)
{
int s=0;
int r=x;
while(fa[r]!=r){
s+=d[r];
r=fa[r];
}return s;
}
void join(int a,int b){
if(a!=b){
fa[b]=a;
}
}
int main(){
int n,m;
cin>>n>>m;
int cnt=0;
for(int i=1;i<=n;i++){
fa[i]=i;
}for(int i=1;i<=m;i++){
int op,x,y;
cin>>op>>x>>y;
if((x>n||y>n)||(op==2&&x==y)){
cnt++;
continue;
}
int fx=find(x),fy=find(y);
int sx=calc(x),sy=calc(y);
if(fx==fy)
{
int s=(sx-sy+3000000)%3;
if(s<0) s+=3;
if(s==1&&op==2){
continue;
}else if(s==0&&op==1){
continue;
}else{
cnt++;
continue;
}
}
else
{
if(op==1){
fa[fx]=fy;
d[fx]=(30000000-d[x]+d[y])%3;
}else if(op==2){
fa[fx]=fy;
d[fx]=(30000000-d[x]+d[y]+1)%3;
}else{
cnt++;
continue;
}
}
}cout<<cnt;
return 0;
}
求大神指点
如果给了修改的代码写下注释不然本蒟蒻看不懂