跪求求助大佬帮忙,就AC了一个点555

P1196 [NOI2002] 银河英雄传说

改了一下,还是错的555 ```cpp #include<bits/stdc++.h> using namespace std; inline int read(){ int s=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))s=s*10+(ch-'0'),ch=getchar(); return s; } inline int readc(){ char ch=getchar(); while(!isalpha(ch))ch=getchar(); return ch; } const int max_n=30000+5; int par[max_n],rank[max_n],dis[max_n],m; int find(int x){ if(x==par[x])return x; dis[x]+=dis[par[x]]; return par[x]=find(par[x]); } void merge(int x,int y){ x=find(x),y=find(y); if(x==y)return; par[x]=y,dis[x]+=rank[y]; rank[y]+=rank[x],rank[x]=0; } int main(){ ios::sync_with_stdio(false); cin.tie(0); for(int i=1;i<=max_n;i++)par[i]=i,rank[i]=1; m=read(); while(m--){ char ch=readc(); int x=read(),y=read(); if(ch=='M')merge(x,y); else { if(find(x)!=find(y))cout<<"-1"<<"\n"; else cout<<abs(dis[x]-dis[y])-1<<"\n"; } } return 0; } ```
by skiy_gyx @ 2019-07-27 09:20:24


@[skiy_gyx](/space/show?uid=48625) 把 ```cpp int find(int x){ if(x==par[x])return x; dis[x]+=dis[par[x]]; return par[x]=find(par[x]); } ``` 改为 ```cpp int find(int x){ if(x==par[x])return x; int to=find(par[x]); dis[x]+=dis[par[x]]; return par[x]=to; } ```
by Smile_Cindy @ 2019-07-27 09:48:42


@[skiy_gyx](/space/show?uid=48625) 真谢谢您,改了就AC了
by skiy_gyx @ 2019-07-27 09:51:54


@[Alpha](/space/show?uid=87058)
by skiy_gyx @ 2019-07-27 09:52:09


@[Smile_Cindy](/user/87058) 本蒟蒻也是这么错的qwq 请问为什么原来的写法不行呢?
by fervency @ 2022-03-23 08:13:55


|