zoukankan      html  css  js  c++  java
  • POJ_2492 A Bug's Life 【并查集】

    一、题面

    POJ2492

    二、分析

    并查集判断类别的题目感觉套路都差不多。

    还是先判断在不在一个集合里,在一个集合里才能判断是否同类。

    若不在一个集合里则需要将这两个点联系起来。

    关于联系起来后关系的变化,画几个图后发现还是异或。

    为什么用0表示同类,1表示异类?画几个图发现这样表示关系变换最简单。

    三、AC代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <fstream>
     5 
     6 using namespace std;
     7 
     8 const int MAXN = 2e3+5;
     9 int Par[MAXN];
    10 bool Rank[MAXN];
    11 
    12 void Init()
    13 {
    14     memset(Par, -1, sizeof(Par));
    15     memset(Rank, 0, sizeof(Rank));
    16 }
    17 
    18 int Find(int x)
    19 {
    20     if(Par[x] == -1)
    21         return x;
    22     int t = Par[x];
    23     Par[x] = Find(Par[x]);
    24     Rank[x] = Rank[t]^Rank[x]; 
    25     return Par[x];
    26 }
    27 
    28 int main()
    29 {
    30     //freopen("input.txt", "r", stdin);
    31     int T, N, M;
    32     scanf("%d", &T);
    33     for(int Cnt = 1; Cnt <= T; Cnt++)
    34     {
    35         if(Cnt!=1)
    36             printf("
    ");
    37         Init();
    38         int x, y, fx, fy;
    39         bool ans = true;
    40         scanf("%d %d", &N, &M);
    41         for(int i = 0; i < M; i++)
    42         {
    43             scanf("%d %d", &x, &y);
    44             if(ans)
    45             {
    46                 fx = Find(x);
    47                 fy = Find(y);
    48                 if(fx == fy && Rank[x] == Rank[y])
    49                 {
    50                     ans = false;
    51                 }
    52                 else if(fx != fy)
    53                 {
    54                     Par[fx] = fy;
    55                     Rank[fx] = Rank[x]^(Rank[y]^1);
    56                 }
    57             }
    58         }
    59         if(ans)
    60         {
    61             printf("Scenario #%d:
    No suspicious bugs found!
    ", Cnt);
    62         }
    63         else
    64         {
    65             printf("Scenario #%d:
    Suspicious bugs found!
    ", Cnt);
    66         }
    67     }
    68     return 0;
    69 }
    View Code
  • 相关阅读:
    使用libmap
    仿真 vcs/ncverilog
    git——git不常见指令记录
    Mac更换鼠标指针样式_ANI、CUR文件解析
    油猴脚本——CSDN防复制破解
    解决Establishing SSL connection without server‘s identity verification is not recommended.
    IDEA激活 试用30天 自动激活
    IDEA Plugins:Free Mybatis plugin(Mapper跳转XML)安装及使用
    Springboot异常汇总
    springbootdemo
  • 原文地址:https://www.cnblogs.com/dybala21/p/10148367.html
Copyright © 2011-2022 走看看