zoukankan      html  css  js  c++  java
  • poj1182(并查集)

    把两个节点的关系转换为对根节点的关系的比较

    View Code
     1 #include <stdio.h>
     2 int father[50001] ,r[50001];
     3 void init(int n)
     4 {
     5     int i;
     6     for(i = 1 ; i <= n ; i++)
     7     {
     8         father[i] = i;
     9         r[i] = 0;
    10     }
    11 }
    12 int find(int x)
    13 {
    14     if(x == father[x])
    15     return father[x];
    16     else
    17     {
    18          int pre = father[x];
    19         father[x] = find(father[x]);
    20         r[x] = (r[x]+r[pre])%3;
    21     }
    22     return father[x];
    23 }
    24 void union1(int x, int y,int d)
    25 {
    26     father[x] = y;
    27     r[x] = d%3;
    28 }
    29 int main()
    30 {
    31     int k,d, x, y, i, j,n,num = 0;
    32     scanf("%d%d", &n,  &k);
    33     init(n);
    34     while(k--)
    35     {
    36         scanf("%d%d%d", &d,&x, &y);
    37         if(x>n||y>n||(d == 2&&x == y))
    38         num++;
    39         else
    40         {
    41             int pa = find(x);
    42             int pb = find(y);
    43             if(pa == pb)
    44             {
    45                 if(d ==1)
    46                 {
    47                     if(r[x] != r[y])
    48                     num++;
    49                 }
    50                 else
    51                 {
    52                     if(r[x]!=(r[y]+1)%3)
    53                      num++;
    54                 }
    55             }
    56             else
    57             union1(pa,pb,r[y]-r[x]+d+2);
    58         }
    59     }
    60     printf("%d\n",num);
    61     return 0;
    62 }
  • 相关阅读:
    三角形外接圆与内切圆
    不等式证明
    不等式证明
    被 6 整除
    被 6 整除
    从切比雪夫不等式到大数定理
    JAVA轻量级文件监控
    Windows应用程序的消息处理机制
    JUnit中@Test的运行顺序
    MyReport报表引擎2.2.0.0新功能
  • 原文地址:https://www.cnblogs.com/shangyu/p/2578396.html
Copyright © 2011-2022 走看看