zoukankan      html  css  js  c++  java
  • POJ3687 Katu Puzzle

    好好写2-sat

    如果a1-->b1矛盾则连边a1-->b2和b1-->a2

    我定了一个ccnt和cnt变量,结果少打一个c,wa了好多次(lll¬ω¬)

    By:大奕哥

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstdlib>
      4 #include<cstring>
      5 #include<algorithm>
      6 #include<vector>
      7 #include<queue>
      8 using namespace std;
      9 const int N=1e4+10;
     10 int top,num,cnt,ccnt,n,m;
     11 int low[N],dfn[N],vis[N],head[N],col[N],s[N];
     12 struct node
     13 {
     14     int to,nex;
     15 }e[4200000];
     16 void add(int x,int y)
     17 {
     18     e[++ccnt].to=y;e[ccnt].nex=head[x];head[x]=ccnt;
     19 }
     20 void dfs(int x)
     21 {
     22     s[++top]=x;dfn[x]=low[x]=++cnt;vis[x]=1;
     23     for(int i=head[x];i;i=e[i].nex)
     24     {
     25         int y=e[i].to;
     26         if(!dfn[y])
     27         {
     28             dfs(y);
     29             low[x]=min(low[x],low[y]);
     30         }
     31         else if(vis[y])
     32         low[x]=min(low[x],dfn[y]);
     33     }
     34     if(low[x]==dfn[x])
     35     {
     36         ++num;
     37         while(s[top+1]!=x)
     38         {
     39             int a=s[top--];
     40             vis[a]=0;
     41             col[a]=num;
     42         }
     43     }
     44 }
     45 bool solve()
     46 {
     47     for(int i=1;i<=n*2;++i)
     48     {
     49         if(!dfn[i])dfs(i);
     50     }
     51     for(int i=1;i<=n;++i)if(col[i]==col[i+n])return 0;
     52     return 1;
     53 }
     54 void init()
     55 {
     56     top=num=cnt=ccnt=0;
     57     memset(low,0,sizeof(low));
     58     memset(dfn,0,sizeof(dfn));
     59     memset(head,0,sizeof(head));
     60     memset(vis,0,sizeof(vis));
     61     memset(col,0,sizeof(col));
     62 }
     63 int main()
     64 {
     65     while(~ scanf("%d%d",&n,&m))
     66     {
     67         init();int a,b,c;char s[5];
     68         for(int i=1;i<=m;++i)
     69         {//x  0  x+n  1
     70             scanf("%d%d%d%s",&a,&b,&c,s);a++;b++;
     71             if(s[0]=='A')
     72             {
     73                 if(c==1)
     74                 {
     75                     add(a+n,b+n);add(b,a);//1 0
     76                     add(a,b);add(b+n,a+n);// 0 1
     77                     add(a,b+n);add(b,a+n);// 0 0
     78                 }
     79                 else
     80                 {
     81                     add(a+n,b);add(b+n,a);//1 1
     82                 }
     83             }
     84             else if(s[0]=='X')
     85             {
     86                 if(c==1)
     87                 {
     88                     add(a+n,b);add(b+n,a);//1 1
     89                     add(a,b+n);add(b,a+n);// 0 0
     90                 }
     91                 else
     92                 {
     93                     add(a,b);add(b+n,a+n);// 0 1
     94                     add(a+n,b+n);add(b,a);// 1 0
     95                 }
     96             }
     97             else
     98             {
     99                 if(c==1)
    100                 {
    101                     add(a,b+n);add(b,a+n);//0 0
    102                 }
    103                 else
    104                 {
    105                     add(a+n,b);add(b+n,a);// 1 1
    106                     add(a+n,b+n);add(b,a);// 1 0 
    107                     add(a,b);add(b+n,a+n);// 0 1
    108                 }
    109             }
    110         }
    111         if(solve())puts("YES");
    112         else puts("NO");
    113     }
    114 }
  • 相关阅读:
    Ansible安装配置
    Git 工作流程
    使用 Docker 搭建 Tomcat 运行环境
    Linux的cron与%
    配置sonar和jenkins进行代码审查
    Jenkins配置基于角色的项目权限管理
    Jenkins和maven自动化构建java程序
    Jenkins修改workspace和build目录
    Git 进阶指南
    git代码回滚:Reset、Checkout、Revert的选择
  • 原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8305168.html
Copyright © 2011-2022 走看看