首页 > 代码库 > poj 1962 Corporative Network
poj 1962 Corporative Network
题目链接:http://poj.org/problem?id=1962
思路:每个集合中用根节点标记这个集合,每个点到根节点的距离。
code:
<span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<set> using namespace std; const int maxn=20005; int pa[maxn],d[maxn]; int findset(int x) //找出x节点到根节点的距离 { if(pa[x]!=x) { int root=findset(pa[x]); d[x]+=d[pa[x]]; //更新x节点的距离 return pa[x]=root; } else return x; } int main() { int T; scanf("%d",&T); while(T--) { int n; char str[10]; scanf("%d",&n); for(int i=1;i<=n;i++) { pa[i]=i; d[i]=0; } while(scanf("%s",str)) { if(str[0]=='O') break; if(str[0]=='E') { int x; scanf("%d",&x); findset(x); printf("%d\n",d[x]); } if(str[0]=='I') { int x,y; scanf("%d%d",&x,&y); pa[x]=y; d[x]=abs(x-y)%1000; } } } return 0; } </span>
poj 1962 Corporative Network
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。