• HLJU 1042 Fight (种类并查集)


    1042: Fight

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 26  Solved: 8
    [Submit][Status][Web Board]

    Description

    尽管格斗是很须要技术的一项运动。可是打群架却不须要什么技术,并且场面一般比較混乱,分不清谁和谁是一伙的,仅仅能看出谁和谁不是一伙的,并且打群架常常会出现猪一样的队友。误伤自己人。

    如今给你一些信息,请你根据这些信息推断是否一定存在猪一样的队友。

    Input

    包括多组測试例子。
    第一行输入两个数N(1<N<10000),M(1<M<1000000). N表示參与打架的人数,M表示M次攻击。

    接下来M行输入两个整数a, b (1<=a, b<=N),表示a攻击了b。

    Output

    若一定存在猪一样的队友输出YES, 否则输出NO。每一个输出占一行。

    Sample Input

    3 3
    1 2
    2 3
    1 3
    
    4 2
    1 2
    3 4
    

    Sample Output

    YES
    NO
    

    HINT

    a攻击b且b攻击c 则可判断 a,c同伙,若a攻击c则有矛盾,即必定存在误伤。

    Source

    tyh




    解析:參见ACdream 1056 Bad Horse (种类并查集)


    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 10005;
    
    int f[2 * maxn + 2];
    
    int Find(int x){
        return x == f[x] ?

    x : f[x] = Find(f[x]); } void unin(int x, int y){ x = Find(x); y = Find(y); if(x != y) f[x] = y; } int main(){ #ifdef sxk freopen("in.txt", "r", stdin); #endif // sxk int n, m, a, b; while(~scanf("%d%d", &n, &m)){ for(int i=1; i<=2 * maxn; i++) f[i] = i; int flag = 0; for(int i=0; i<m; i++){ scanf("%d%d", &a, &b); if(Find(a) == Find(b) || Find(a + maxn) == Find(b + maxn)) flag = 1; else{ unin(a, b + maxn); unin(a + maxn, b); } } puts(flag ?

    "YES" : "NO"); } return 0; }




  • 相关阅读:
    C# 正则表达式
    C# 预处理命令
    C# System.Collections
    C#文件流 System.IO和对文件的读写操作
    c# 网站发布
    C# 数据库
    c# 数据存储过程 存储函数
    insert 插入
    SVN远程管理
    【Win】印象笔记快捷键
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7300505.html
Copyright © 2020-2023  润新知