标签:
题解见:http://www.cnblogs.com/shenben/p/5757004.html
几乎是一模一样的题目
AC代码:
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; #define N 30010 int fa[N],cnt[N],top[N]; inline int read(){ register int x=0,f=1; register char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f; } inline char in(){ for(register char ch=getchar();;ch=getchar()) if(ch>=‘A‘&&ch<=‘Z‘) return ch; } int find(int x){ if(fa[x]==x) return x; int t=fa[x]; fa[x]=find(fa[x]); fa[x]=fa[t]; top[x]=top[t]; cnt[x]=cnt[t]+cnt[x]; return fa[x]; } int main(){ int n,x,y,a,b;char ch; n=read(); for(int i=1;i<=30000;i++) fa[i]=top[i]=i; for(int i=1;i<=n;i++){ ch=in(); if(ch==‘M‘){ a=read();b=read(); x=find(a);y=find(b); fa[x]=y;find(top[y]); cnt[x]=cnt[top[y]]+1; top[y]=top[x]; } else{ a=read();b=read(); x=find(a);y=find(b); if(x!=y) puts("-1"); else printf("%d\n",abs(cnt[a]-cnt[b])-1); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/shenben/p/5756968.html