zoukankan      html  css  js  c++  java
  • cdoj1328卿学姐与诡异村庄

    地址:http://acm.uestc.edu.cn/#/problem/show/1328

    题目:

    卿学姐与诡异村庄

    Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
     

    日复一日,年复一年,春去秋来。

    卿学姐终于从天行廖那里毕业啦。出山的卿学姐首先来到了一个诡异的村庄。

    在这个村庄中,只有两种人,一种是好人,一种是坏人。

    好人只说真话,坏人只说假话。

    村庄虚伪的平静由于卿学姐的到来,终于被打破了。

    人们开始互相指控,每个人都会说另外一个人是否是好人。

    卿学姐修行途中只学会了膜法,却不谙世事,所以卿学姐无法确认哪些人是好人,哪些人是坏人。

    但是机智的卿学姐意识到可以通过这些人的指控来分辨。

    现在告诉你村庄中每个人指控谁是否为好人,请问是否有个合理的分类能够符合所有的指控。

    Input

    第一行一个整数NN,表示村庄总共有NN个人,村民从11开始编号到NN

    1N1000001≤N≤100000

    接下来NN行,每行两个整数,ai,tai,t,如果tt是11,那么说明第ii个人认为第aiai个人是好人。如果tt是22,那么说明第ii个人认为第aiai个人是坏人。

    1aiN1≤ai≤N

    Output

    如果存在一个好人坏人的分类能够满足所有的指控,那么输出"Time to show my power",否则输出"One face meng bi"

    Sample input and output

    Sample InputSample Output
    3
    2 2
    3 1
    1 2
    Time to show my power
    3
    2 2
    3 2
    1 2
    One face meng bi

    Hint

    第一组样例中,如果1是好人,2和3都是坏人,就能解释得通这些指控

    思路:

    听郭大侠讲了题解后才会做的,原来查并集也能这么用,惊讶!

    –  思路就是令A是好人表示为Ag,A是坏人表示为Ab。

    –  如果A说B是坏人,那么将Ag和Bb合并,将Ab和Bg合并。

    –  如果A说B是好人,那么将Ag和Bg合并,将Ab和Bb合并。

    –  如果最后Ag和Ab在同一个集合,就无解。

    好人我用的是前1e5个数代表,坏人的话直接映射到1e5之后。

    如果在集合中就用1代表,反之用0代表

    然后处理完所有的询问之后,把集合中的所有数扫一遍判断是否存在非法的数据(一开始我只用集合中是否同时存在第一个人是好人也是坏人来判断,然后果断wa了,,,)

      

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cmath>
     5 #include <cstring>
     6 #include <queue>
     7 #include <stack>
     8 #include <map>
     9 #include <vector>
    10 #include <cstdlib>
    11 #include <string>
    12 
    13 #define PI acos((double)-1)
    14 #define E exp(double(1))
    15 using namespace std;
    16 const int has=1e5;
    17 int root[2*has+10];
    18 int fd(int x)
    19 {
    20     return x!=root[x]?root[x]=fd(root[x]):x;
    21 }
    22 void join(int x,int y)
    23 {
    24     int a=fd(x),b=fd(y);
    25     if(a!=b)root[a]=b;
    26 }
    27 int main (void)
    28 {
    29     int n;
    30     cin>>n;
    31     for(int i=1;i<=has*2+9;i++)
    32         root[i]=i;
    33     for(int i=1;i<=n;i++)
    34     {
    35         int x,op;
    36         scanf("%d%d",&x,&op);
    37         if(op==1)
    38             join(i,x),join(has+i,has+x);
    39         else
    40             join(i,has+x),join(has+i,x);
    41 
    42     }
    43     for(int j=1;j<=n;j++)
    44             if(fd(j)==fd(has+j))
    45             {
    46                 printf("One face meng bi
    ");return 0;
    47             }
    48     printf("Time to show my power
    ");
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/weeping/p/5455993.html
Copyright © 2011-2022 走看看