uva 1329 - Corporative Network

来源:互联网 发布:2017网络流行语录 编辑:程序博客网 时间:2024/05/17 03:58

题意:有n个结点,初始时每个结点的父节点都不存在。你的任务是执行如下操作:

           I u v:把结点u的父节点设为v,距离为|u -v|除以1000的余数。输入保证执行指令前u没有父节点。

          E u :询问u到根节点的距离。

#include<cstdio>#include<algorithm>#define mx 20010using namespace std;int fa[mx],dis[mx];int find(int x){if(fa[x]!=x){int r=find(fa[x]);dis[x]+=dis[fa[x]];return fa[x]=r;}return x;}int main(){int i,n,u,v,t;char s;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=1;i<=n;i++){fa[i]=i,dis[i]=0;}while(scanf(" %c",&s)!=EOF && s!='O'){if(s=='E'){scanf("%d",&u);find(u);printf("%d\n",dis[u]);}else{scanf("%d%d",&u,&v);fa[u]=v;dis[u]=abs(u-v)%1000;}}}return 0;}