1 条题解
-
0廖明杰 (liaomingjie) LV 7 @ 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
- 上传者