11分,求助
查看原帖
11分,求助
556794
陈新雨cxy楼主2023/8/10 21:38

样例过了可是只有11分,求帮助

#include <bits/stdc++.h>
#define ll long long

using namespace std;

template<typename T>
inline void in (T &x) {char c;int f=1;do {c=getchar ();if (c=='-') f=-1;} while (c>'9' || c<'0');for (x=0;c>='0' && c<='9';c=getchar ()) x=(x<<1)+(x<<3)+(c^48);x*=f;}

template<typename T>
inline void out (T x,char c) {if (x==0) {putchar ('0'),putchar (c); return ;}if (x<0)putchar ('-'),x=-x;int sta[20],k=0;while (x) sta[++k]=x%10,x/=10;while (k) putchar (sta[k--]+'0');putchar (c);}

const int N=3e4+5;

int t,x,y,a[N],fa[N],s[N];   
char tp;

int find(int x){                                       
    if(fa[x]==x){
		return fa[x];
	}                                  
    s[x]+=s[fa[x]];    
    return fa[x]=find(fa[x]);
}

int main(){	
//  ios::sync_with_stdio(0);
//  cin.tie(0);
//  cout.tie(0);
//	freopen("std.in","r",stdin);
	in(t);
    for(int i=1;i<N;i++){                                
        fa[i]=i;
        s[i]=0;
        a[i]=1;
    }
    while(t--){
        scanf(" %c",&tp);
		in(x),in(y);
        int fx=find(x),fy=find(y);                                    
        if(tp=='M'){
            s[fx]+=a[fy];        
            fa[fx]=fy;                                    
            a[fy]+=a[fx];                            
            a[fx]=0;                        
        }
        if(tp=='C'){
            if(fx!=fy){
				out(-1,'\n');	
			}         
			else{
				out(abs(s[x]-s[y])-1,'\n');   
			} 
        }
    }
    return 0;
}
2023/8/10 21:38
加载中...