1 条题解

  • 0
    @ 2022-9-25 16:52:30
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<algorithm>
    #include<vector>
    #define int long long
    using namespace std;
    const int N=1e6+5;
    const int INF=0x3f3f3f3f;
    int dep[N],fa[N],dis[N];//dep[i]此条队伍的人数    fa[i]这个人的祖宗/也是这个人所在的队伍   dis[i]这个人在他所在的队列里的位置(第几名)
    void init(){
    	for(int i=1;i<=30000;i++){
    		fa[i]=i;
    		dep[i]=1,dis[i]=0;
    	}
    }
    int find(int x){
    	if(fa[x]==x)return x;
    	int xx=find(fa[x]);
    	dis[x]+=dis[fa[x]];
    	return fa[x]=xx;
    }
    void add(int x,int y){
    	int fx=find(x);
    	int fy=find(y);
    	dis[fx]+=dep[fy];
    	fa[fx]=fy;
    	dep[fy]+=dep[fx];
    	dep[fx]=0;
    	
    }
    int sum(int x,int y){
    	int fx=find(x);
    	int fy=find(y);
    	if(fx!=fy){
    		return -1;
    	}
    	return abs(dis[x]-dis[y])-1;
    }
    signed main(){
    	int n;
    	scanf("%lld",&n);
    	init();
    	for(int i=1;i<=n;i++){
    		char opt;
    		int x,y;
    		cin >> opt;
    		scanf("%lld%lld",&x,&y);
    		if(opt=='M'){
    			add(x,y);
    		}else if(opt=='C'){
    			cout << sum(x,y) << endl;
    		}
    	}
    	return 0;
    }
    
    
  • 1

信息

ID
149
时间
1000ms
内存
128MiB
难度
7
标签
递交数
40
已通过
11
上传者