• poj 1182食物链解题报告


    链接:http://poj.org/problem?id=1182

    并查集的一道经典题目,主要是处理两个之间的关系的时候比较难想,也比较麻烦

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 50005
     4 struct node
     5 {
     6     int p;
     7     int r;
     8 };
     9 node f[N];
    10 int n;
    11 void init()
    12 {
    13     int i;
    14     for(i=1;i<=n;i++)
    15     {
    16         f[i].p=i;
    17         f[i].r=0;
    18     }
    19 }
    20 int find(int x)
    21 {
    22     if(f[x].p==x)
    23     return x;
    24     int temp=f[x].p;
    25     f[x].p=find(temp);
    26     f[x].r=(f[temp].r+f[x].r)%3;
    27     return f[x].p;
    28 }
    29 void uni(int x,int y,int sx,int sy,int d)
    30 {
    31     f[sy].p=sx;
    32     f[sy].r=(3+(d-1)+f[x].r-f[y].r)%3;
    33 }
    34 int main()
    35 {
    36     int d,a,b,m;
    37     int i,j,k;
    38     scanf("%d%d",&n,&m);
    39     init();
    40     int num=0;
    41     while(m--)
    42     {
    43         scanf("%d%d%d",&d,&a,&b);
    44         if(a>n||b>n)
    45         {
    46             num++;
    47             continue;
    48         }
    49         int pa=find(a);
    50         int pb=find(b);
    51         if(pa!=pb)
    52         uni(a,b,pa,pb,d);
    53         else
    54         {
    55             if(d==1&&f[a].r!=f[b].r)
    56             num++;
    57             else if(d==2&&(f[b].r-f[a].r+3)%3!=1)
    58             num++;
    59         }
    60     }
    61     printf("%d\n",num);
    62     return 0;
    63 }
  • 相关阅读:
    作业
    动手动脑
    作业
    《大道至简》第二章读后感
    《大道至简》第一章读后感
    局域网内网站发布(三)
    局域网内网站发布(二)
    局域网内网站发布(一)
    管理系统
    台式机没有声音
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2493408.html
Copyright © 2020-2023  润新知