zoukankan      html  css  js  c++  java
  • hdu4115 Eliminate the Conflict

    Alice要赢的话,只有两种情况,平和胜

    对于A和B,若要求相同,x与y不同,x->~y,y->~x

                   若要求不同,x与y相同,x->~y,y->~x

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 int t,n,m;
     6 int a[10010];
     7 int f[4][2];
     8 void gao(){
     9     f[1][0]=1,f[1][1]=2;
    10     f[2][0]=2,f[2][1]=3;
    11     f[3][0]=3,f[3][1]=1;
    12 }
    13 struct edge{
    14     int v,next;
    15 }e[100000];
    16 int head[20010],tol,z,top,cnt;
    17 int dfn[20010],low[20010],st[20010],belong[20010];
    18 bool instack[20010];
    19 void init(){
    20     tol=z=top=cnt=0;
    21     memset(head,-1,sizeof head);
    22     memset(dfn,0,sizeof dfn);
    23     memset(belong,0,sizeof belong);
    24     memset(instack,0,sizeof instack);
    25 }
    26 void addedge(int u,int v){
    27     e[tol].v=v,e[tol].next=head[u],head[u]=tol++;
    28 }
    29 void tarjan(int u){
    30     dfn[u]=low[u]=++cnt;
    31     st[top++]=u,instack[u]=1;
    32     for(int i=head[u];i!=-1;i=e[i].next){
    33         int v=e[i].v;
    34         if(!dfn[v]){
    35             tarjan(v);
    36             low[u]=min(low[u],low[v]);
    37         }else if(instack[v]){
    38             low[u]=min(low[u],dfn[v]);
    39         }
    40     }
    41     if(low[u]==dfn[u]){
    42         int now;
    43         do{
    44             now=st[--top],instack[now]=0;
    45             belong[now]=z;
    46         }while(now!=u);
    47         z++;
    48     }
    49 }
    50 int g(int x){
    51     if(x>n) x-=n;
    52     else x+=n;
    53     return x;
    54 }
    55 int main(){
    56     scanf("%d",&t);
    57     gao();
    58     for(int ca=1;ca<=t;ca++){
    59         scanf("%d%d",&n,&m);
    60         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    61         int u,v,k;
    62         init();
    63         for(int i=0;i<m;i++){
    64            scanf("%d%d%d",&u,&v,&k);
    65            if(k){
    66                 for(int p=0;p<2;p++){
    67                    for(int q=0;q<2;q++){
    68                        if(f[a[u]][p]==f[a[v]][q]){
    69                            addedge(u+n*p,g(v+n*q));
    70                            addedge(v+n*q,g(u+n*p));
    71                        }
    72                    }
    73                 }
    74            }else{
    75                 for(int p=0;p<2;p++){
    76                    for(int q=0;q<2;q++){
    77                        if(f[a[u]][p]!=f[a[v]][q]){
    78                            addedge(u+n*p,g(v+n*q));
    79                            addedge(v+n*q,g(u+n*p));
    80                        }
    81                    }
    82                 }
    83            }
    84         }
    85         for(int i=1;i<=2*n;i++){
    86            if(!dfn[i]) tarjan(i);
    87         }
    88         bool yes=1;
    89         for(int i=1;i<=n;i++){
    90            if(belong[i]==belong[n+i]){yes=0;break;}
    91         }
    92         printf("Case #%d: ",ca);
    93         if(yes) cout<<"yes"<<endl;
    94         else cout<<"no"<<endl;
    95     }
    96     return 0;
    97 }
    hdu4115
  • 相关阅读:
    DB2创建序列
    hibernate注解影射表
    自定义异常类一
    【JVM】java方法区
    【JVM】java棧
    (2)java堆内存
    (1)java虚拟机概念和结构图
    枚举应用五
    设计模式之命令模式学习理解
    eclipse中javadoc给项目生成api文档
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3421331.html
Copyright © 2011-2022 走看看