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
  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3421331.html
Copyright © 2011-2022 走看看