LA3027 合作网络
2014-02-26 21:07
253 查看
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> #include<math.h> #include<queue> #include<vector> #include<map> #define MAXN 20000+10 //#define MAXM 20000+5 #define oo 9556531 #define eps 0.000001 #define PI acos(-1.0) #define REP1(i,n) for(int i=0;i<(n);i++) #define REP2(i,n) for(int i=1;i<=(n);i++) using namespace std; int p[MAXN]; int d[MAXN]; int n,t; void init() { REP2(i,n) { p[i]=i; d[i]=0; } } int findx(int x) { // return p[x]==x?0:d[x]+getans(p[x]); if (p[x]!=x) //d[x]任然为0,不需要更新 { int px=findx(p[x]);//压缩栈,保证前面的根节点已经更新过 d[x]=d[x]+d[p[x]];//保证d[p[x]]已经是p[x]到根节点的距离 // cout<<"px="<<px<<","<<"d[x]="<<d[x]<<endl; return p[x]=px;//在所有的d更新完毕后,把x连接到根节点px上 }else return x; } int main() { cin>>t; for(;t;t--) { scanf("%d\n",&n); init(); char Q[20]; while(cin>>Q) { // cout<<"Q="<<Q<<endl; if (Q[0]=='O') break; if (Q[0]=='E')//多次询问E,动态更新 { int x;cin>>x; int px=findx(x); cout<<d[x]<<endl; } if (Q[0]=='I') { int i,j; cin>>i>>j; d[i]=abs(i-j)%1000;//d[i]:i到父节点的距离,注意取模 p[i]=j;//i的父节点是j } } } return 0; }
相关文章推荐
- LA 3027 合作网络(并查集)(训练指南)
- 中国军事专家吁加强国际合作预防网络恐怖袭击
- 类似微软Kinect的技术:实时动作捕捉技术(使用计算机视觉技术)寻求合作!(体感游戏技术!可用于游戏机、网络游戏...等)
- 基于Comet推送的网络拍卖服务 北京地区诚征商业合作伙伴
- 餐饮老板血泪分享:那些年跟网络平台合作的辛酸史
- 【学习笔记】——网络营销7(资源合作营销)
- Win10网络直播:只有微软合作伙伴才有权限观看
- 韩国政府网络受“僵尸”围攻,防治Bot网络需多方合作
- 戴尔呼吁全球合作抗击网络犯罪
- 巨人和华为在网络游戏领域开展技术合作
- LA 3027 合作网络 并查集
- 「2017年教育部-永信至诚产学合作协同育人网络空间安全专业课程教学研讨会」参会总结
- 甲骨文正动新的Oracle合作伙伴网络计划正式公布
- LA 3027 合作网络
- 合作项目二:“礼物”网---网络项目(拟.NET开发)
- 网络项目寻找创业合作伙伴
- 基于合作覆盖认知无线电网络能量接收的联合资源分配和准入控制
- 例题3.6 合作网络 UVa1329
- 并查集(合作网络,LA 3027)