• poj 1182 食物链


    题意:

    中文题面。

    思路:

    因为是环形关系,所以每个就用3个关系表示:

    (x,y) (x+n,y+n) (x+2*n,y+2*n) 表示同类

    (x,y+n) (x+n,y+2*n) (x+2*n,y+n) 表示x吃y

    其余的,判断一个有无矛盾就行了。

    坑:

    无。。。。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 const int N = 50005;
     5 
     6 int par[N * 3];
     7 int ran[N * 3];
     8 
     9 void init(int n)
    10 {
    11     for (int i = 0;i <= n * 3;i++)
    12     {
    13         par[i] = i;
    14         ran[i] = 0;
    15     }
    16 }
    17 
    18 int fin(int x)
    19 {
    20     if (x == par[x]) return x;
    21     else return par[x] = fin(par[x]);
    22 }
    23 
    24 void unit(int x,int y)
    25 {
    26     x = fin(x);
    27     y = fin(y);
    28 
    29     if (x == y) return;
    30 
    31     if (ran[x] < ran[y]) par[x] = y;
    32     else
    33     {
    34         par[y] = x;
    35         if (ran[x] == ran[y]) ran[x]++;
    36     }
    37 }
    38 
    39 int main()
    40 {
    41     int n,k;
    42 
    43     scanf("%d%d",&n,&k);
    44 
    45     init(n);
    46 
    47     int ans = 0;
    48 
    49     for (int i = 0;i < k;i++)
    50     {
    51         int op,x,y;
    52 
    53         scanf("%d%d%d",&op,&x,&y);
    54 
    55         if (x > n || y > n)
    56         {
    57             ans++;
    58             continue;
    59         }
    60 
    61         if (op == 1)
    62         {
    63             if (fin(x) == fin(y+n) || fin(x+n) == fin(y)) ans++;
    64             else
    65             {
    66                 unit(x,y);
    67                 unit(x+n,y+n);
    68                 unit(x+2*n,y+2*n);
    69             }
    70         }
    71 
    72         if (op == 2)
    73         {
    74             if (x == y) ans++;
    75             else if (fin(x) == fin(y) || fin(y) == fin(x+n)) ans++;
    76             else
    77             {
    78                 unit(x,y+n);
    79                 unit(x+n,y+2*n);
    80                 unit(x+2*n,y);
    81             }
    82         }
    83     }
    84 
    85     printf("%d
    ",ans);
    86 
    87     return 0;
    88 }
  • 相关阅读:
    2017.2.27学习笔记-----开发板,PC,虚拟机三者ping通
    2017.2.25学习笔记
    vue基础之计算属性和侦听器
    vue基础之组件通信
    vue基础之组件创建
    vue基础之监听器
    vue基础之生命周期
    vue基础之条件渲染
    vue基础之插槽
    vue总结
  • 原文地址:https://www.cnblogs.com/kickit/p/8029199.html
Copyright © 2020-2023  润新知