题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配关系。

分析 : 本题雷同POJ 1182 食物链, 如果会了那一题, 那现在这题便简单多了, 建议先了解食物链的偏移向量做法。这里也是使用向量的思考方式来进行relation的变化, 这里我令 relation = 0为同性, relation = 1为异性, 接下来的步骤就和食物链的雷同了。

优化 :

① 因为关系的值只有0 或 1, 这里可以考虑位运算中的异或来加快relation变化的运算。

② 由于给出的输入很多, 所以可以采用读入挂来加快读入速度。

瞎搞 : 一开始计算关系的时候居然去%1, 失策啊, 要将范围控制在[0, n]之间的话就应该%(n+1)。还有在判断是否矛盾时候, 实际只要判断两个虫的relation是否一样即可, 我还在加减乘除模来模去=_=

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
;
int f[maxn], relation[maxn], n, num;
inline int Scan()
{
    , ch;
    bool flag = false;
    if((ch=getchar()) == '-') flag = true;
    ';
    +ch-';
    return flag?-res:res;
}
inline void initialize()
{
    ; i<=n; i++){
        relation[i] = ;
        f[i] = i;
    }
}
int findset(int x)
{
    if(f[x] == x) return x;
    int father = f[x];
    f[x] = findset(father);
    relation[x] = relation[father]^relation[x];
    //同 relation[x] = ( relation[father] + relation[x] )%2;
    return f[x];
}
int main(void)
{
    int nCase;
    nCase = Scan();
    ;
    while(nCase--){
        bool flag = true;
        n = Scan(); num = Scan();
        initialize();
        while(num--){
            int a, b;
            a = Scan(); b = Scan();
            if(!flag) continue;
            if(a==b){
                flag = false;
                continue;
            }
            int root_a = findset(a);
            int root_b = findset(b);
            if(root_a != root_b){
                f[root_b] = root_a;
                relation[root_b] = relation[a]^^(-relation[b]);
            //同 relation[root_b] = ( relation[a] + 1 - relation[b] )%2;
            }else{
                if(relation[a]==relation[b]) flag = false;
                //同 if( (-relation[a]+relation[b]+2)%2 != 1) flag = false;
            }
        }
        if(!flag){
            printf("Scenario #%d:\nSuspicious bugs found!\n", ++t);
        }else{
            printf("Scenario #%d:\nNo suspicious bugs found!\n", ++t);
        }
        puts("");
    }
    ;
}

POJ 2492 A Bug's Life (带权并查集 && 向量偏移)的更多相关文章

  1. POJ 2492 A Bug's Life 带权并查集

    题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...

  2. POJ 1182 食物链 (带权并查集 && 向量偏移)

    题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...

  3. 【POJ 1984】Navigation Nightmare(带权并查集)

    Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...

  4. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  5. [poj 2912] Rochambeau 解题报告 (带权并查集)

    题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...

  6. POJ2492 A Bug's Life 带权并查集

    分析:所谓带权并查集,就是比朴素的并查集多了一个数组,记录一些东西,例如到根的距离,或者和根的关系等 这个题,权数组为relation 代表的关系  1 和父节点不同性别,0,和父节点同性别 并查集一 ...

  7. poj 1733 Parity game【hash+带权并查集】

    hash一下然后用带权并查集做模2下的前缀和 #include<iostream> #include<cstdio> #include<map> #include& ...

  8. 【poj 1182】食物链(图论--带权并查集)

    题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...

  9. 【POJ 1988】 Cube Stacking (带权并查集)

    Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...

随机推荐

  1. linux c++ 实现http请求

    main.cpp #include HttpReq.h #include <string.h> int main(void) { HttpRequest* Http; char http_ ...

  2. BUUOJ reverse 刮开有奖

    刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...

  3. spring boot-8.静态资源映射

    1.webjars WebJars是将客户端(浏览器)资源(javascript,Css等)打成jar包文件,以对资源进行统一依赖管理.WebJars的jar包部署在Maven中央仓库上.官网地址:h ...

  4. java中的多态关系的运用

    1.多态发生的三个必备条件 继承.重写.父类引用指向子类对象 2.注意 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误:如果有,再去调用子类的同名方法. 方法的重写,也就是 ...

  5. C中的异常处理

    1,C 语言崇尚简洁高效,因此语言本身并没有异常处理的相关语法规则,但是异常处理在 C 语言中 是存在的,我们有必要从 C 语言开始先看一看 C 语言中的异常处理是怎样, 然后对比 C++ 里面的异常 ...

  6. 如何将Numpy加速700倍?用 CuPy 呀

    如何将Numpy加速700倍?用 CuPy 呀 作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助.借助于 Numpy,数据科学家 ...

  7. numpy-tile 数组复制

    tile(A, reps):把数组A复制成新数组 # 把 矩阵 看做一个整体,第二个参数代表把 矩阵 复制 m*n 次 b = np.arange(1, 5).reshape(2, 2) print( ...

  8. Eclipse创建Maven多模块工程Module开发(图文教程)

    自己研究了下Eclipse用Maven多模块工程Module开发,跟大家分享一下! 功能模块来分Module,跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/ ...

  9. 使用html2canvas实现屏幕截图

    相关文件(vue3.0) <script src="https://cdn.jsdelivr.net/bluebird/latest/bluebird.js">< ...

  10. vue+hbuilder 打包成移动app

    查看了很多网上写的改来改去都在手机上运行不起来,运行起来又是白屏:最后放弃,自己结合文档搞吧! 1. 项目目录下的config文件夹里的index.js文件中,将build对象下的assetsPubl ...