3027 - Corporative Network

3027 - Corporative Network

思路:并查集;

cost记录当前点到根节点的距离,每次合并时路径压缩将cost更新。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<stack>
 7 #include<set>
 8 #include<queue>
 9 using namespace std;
10 int   bin[20005];
11 int   du[20005];
12 char str[20];
13 int main(void)
14 {
15         int i,j;
16         int n;
17         scanf("%d",&n);
18         while(n--)
19         {
20                 int m;
21                 scanf("%d",&m);
22                 for(i = 1; i <= 20005; i++)
23                         bin[i] = i,du[i] = 0;
24                 while(scanf("%s",str),str[0]!='O')
25                 {
26                         int x,y;
27                         if(str[0]=='I')
28                         {
29                                 scanf("%d %d",&x,&y);
30                                 int xx;
31                                 for(xx = y; bin[xx]!=xx;)
32                                 {
33                                         xx = bin[xx];
34                                         du[y]+=du[xx];
35                                 }
36                                 bin[y] = xx;
37                                 bin[x] = xx;
38                                 du[x] = du[y]+abs(x-y)%1000;
39                         }
40                         else
41                         {      int sum = 0;
42                                 int xx;scanf("%d",&x);
43                                 for(xx = x; bin[xx]!=xx;)
44                                 {
45                                         xx=bin[xx],du[x]+=du[xx];
46                                 }
47                                 bin[x] = xx;
48                                 printf("%d\n",du[x]);
49                         }
50                 }
51         }
52         return 0;
53 }

 

转载于:https://www.cnblogs.com/zzuli2sjy/p/5931103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值