poj1988

来源:互联网 发布:ubuntu 搜狗拼音 乱码 编辑:程序博客网 时间:2024/06/08 18:11
#include<iostream>#include<algorithm>#include<stdlib.h>#include<string.h>#include<math.h>#include<string>#include<vector>#include<queue>#include<list>using namespace std;typedef long long lld;typedef unsigned int ud;#define Inf INT_MAX/2//int最大#define Min(x,y) (x)<(y)?(x):(y)#define Max(x,y) (x)>(y)?(x):(y)#define MemsetMax(a) memset(a,100,sizeof a)#define MemsetZero(a) memset(a,0,sizeof a)#define MemsetMin(a) memset(a,-1,sizeof a)#define PQ priority_queue#define Q queue#define N 30002#define M 100002struct Node{int fa,dis,tot;}cube[N];int n,m;void Init(){for(int i=0;i<N;i++){cube[i].fa=i;cube[i].dis=0;cube[i].tot=1;}}int find(int x){if(cube[x].fa==x)return x;int temp=find(cube[x].fa);cube[x].dis+=cube[cube[x].fa].dis;return cube[x].fa=temp;}void move(int a,int b){int a_f=find(a);int b_f=find(b);cube[b_f].dis=cube[a_f].tot;cube[b_f].fa=a_f;cube[a_f].tot+=cube[b_f].tot;}int main(){int a,b;char ch;while(scanf("%d%*c",&n)!=EOF){Init();while(n--){scanf("%c%*c",&ch);if(ch=='M'){scanf("%d%d%*c",&a,&b);move(a,b);}else if(ch=='C'){scanf("%d%*c",&a);int fa=find(a);printf("%d\n",cube[fa].tot-cube[a].dis-1);}}}return 0;}
0 0
原创粉丝点击