• LA3027 合作网络


     5 #include<iostream>
     6 #include<stdio.h>
     7 #include<string.h>
     8 #include<algorithm>
     9 #include<stdlib.h>
    10 #include<math.h>
    11 #include<queue>
    12 #include<vector>
    13 #include<map>
    14 #define MAXN 20000+10
    15 //#define MAXM 20000+5
    16 #define oo 9556531
    17 #define eps 0.000001
    18 #define PI acos(-1.0)
    19 #define REP1(i,n) for(int i=0;i<(n);i++)
    20 #define REP2(i,n) for(int i=1;i<=(n);i++)
    21 using namespace std;
    22 
    23 int p[MAXN];
    24 int d[MAXN];
    25 int n,t;
    26 
    27 void init()
    28 {
    29     REP2(i,n)
    30     {
    31         p[i]=i;
    32         d[i]=0;
    33     }
    34 }
    35 
    36 int findx(int x)
    37 {
    38 //    return p[x]==x?0:d[x]+getans(p[x]);
    39       if (p[x]!=x) //d[x]任然为0,不需要更新
    40       {
    41           int px=findx(p[x]);//压缩栈,保证前面的根节点已经更新过
    42           d[x]=d[x]+d[p[x]];//保证d[p[x]]已经是p[x]到根节点的距离
    43 //          cout<<"px="<<px<<","<<"d[x]="<<d[x]<<endl;
    44           return p[x]=px;//在所有的d更新完毕后,把x连接到根节点px上
    45       }else return x;
    46 }
    47 
    48 int main()
    49 {
    50     cin>>t;
    51     for(;t;t--)
    52     {
    53         scanf("%d
    ",&n);
    54         init();
    55         char Q[20];
    56         while(cin>>Q)
    57         {
    58 //            cout<<"Q="<<Q<<endl;
    59             if (Q[0]=='O') break;
    60             if (Q[0]=='E')//多次询问E,动态更新
    61             {
    62                 int x;cin>>x;
    63                 int px=findx(x);
    64                 cout<<d[x]<<endl;
    65             }
    66             if (Q[0]=='I')
    67             {
    68                 int i,j;
    69                 cin>>i>>j;
    70                 d[i]=abs(i-j)%1000;//d[i]:i到父节点的距离,注意取模
    71                 p[i]=j;//i的父节点是j
    72             }
    73         }
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    数1的个数
    找水王2
    书店促销
    返回一个二维整数数组中最大联通子数组的和
    敏捷软件开发读书笔记(三)
    软件工程团队开发——第一次冲刺会议总结
    返回一个二维整数数组中最大联通子数组的和
    结对项目开发电梯调度
    《最后期限》——读书笔记03
    最后期限——阅读笔记2
  • 原文地址:https://www.cnblogs.com/little-w/p/3570227.html
Copyright © 2020-2023  润新知