zoukankan      html  css  js  c++  java
  • BZOJ1823: [JSOI2010]满汉全席

    2-SAT…

     1 /**************************************************************
     2     Problem: 1823
     3     User: zhuohan123
     4     Language: C++
     5     Result: Accepted
     6     Time:4 ms
     7     Memory:1300 kb
     8 ****************************************************************/
     9  
    10 #include <iostream>
    11 #include <cstdio>
    12 #include <cstring>
    13 #include <algorithm>
    14 using namespace std;
    15 inline int imin(int a,int b){return a<b?a:b;}
    16 struct food{int h,m;}f[110];
    17 struct point{int head,wk,dfn,low,instack;}p[210];int pnum;
    18 struct edge{int to,next;}g[2100];int gnum;
    19 void addedge(int from,int to)
    20 {
    21     g[++gnum].to=to;g[gnum].next=p[from].head;p[from].head=gnum;
    22 }
    23 int blocknum,dfsnum;
    24 int s[210],sr;
    25 void tarjan(int po)
    26 {
    27     p[po].dfn=p[po].low=++dfsnum;
    28     s[++sr]=po;p[po].instack=true;
    29     for(int i=p[po].head;i;i=g[i].next)
    30     {
    31         if(!p[g[i].to].dfn)
    32         {
    33             tarjan(g[i].to);
    34             p[po].low=imin(p[po].low,p[g[i].to].low);
    35         }
    36         else if(p[g[i].to].instack)
    37             p[po].low=imin(p[po].low,p[g[i].to].dfn);
    38     }
    39     if(p[po].dfn==p[po].low)
    40     {
    41         blocknum++;
    42         while(s[sr]!=po)
    43         {
    44             p[s[sr]].wk=blocknum;
    45             p[s[sr]].instack=false;
    46             sr--;
    47         }
    48         p[s[sr]].wk=blocknum;
    49         p[s[sr]].instack=false;
    50         sr--;
    51     }
    52 }
    53 int main(int argc, char *argv[])
    54 {
    55     int T;scanf("%d",&T);
    56     while(T--)
    57     {
    58         pnum=gnum=blocknum=dfsnum=0;
    59         memset(p,0,sizeof p);
    60         int n,m;scanf("%d%d",&n,&m);
    61         for(int i=1;i<=n;i++)f[i].h=++pnum,f[i].m=++pnum;
    62         while(m--)
    63         {
    64             char str[60]={0};while(!str[0])gets(str);
    65             int a=0,b=0,ha,hb,now=0;
    66             while(str[now]!='h'&&str[now]!='m')now++;
    67             ha=(str[now]=='h');
    68             while(str[now]>'9'||str[now]<'0')now++;
    69             while(str[now]>='0'&&str[now]<='9')a=a*10+str[now]-'0',now++;
    70             while(str[now]!='h'&&str[now]!='m')now++;
    71             hb=(str[now]=='h');
    72             while(str[now]>'9'||str[now]<'0')now++;
    73             while(str[now]>='0'&&str[now]<='9')b=b*10+str[now]-'0',now++;
    74             if(ha&&hb)addedge(f[a].m,f[b].h),addedge(f[b].m,f[a].h);
    75             if(!ha&&hb)addedge(f[a].h,f[b].h),addedge(f[b].m,f[a].m);
    76             if(ha&&!hb)addedge(f[a].m,f[b].m),addedge(f[b].h,f[a].h);
    77             if(!ha&&!hb)addedge(f[a].h,f[b].m),addedge(f[b].h,f[a].m);
    78         }
    79         for(int i=1;i<=pnum;i++)
    80             if(!p[i].dfn)tarjan(i);
    81         bool isgood=true;;
    82         for(int i=1;i<=n;i++)
    83             if(p[f[i].h].wk==p[f[i].m].wk)
    84             isgood=false;
    85         if(isgood)puts("GOOD");
    86         else puts("BAD");
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    小米、华为与联想,背后隐含的三种模式(转)
    怎样使用jstack诊断Java应用程序故障(转)
    多线程中的死锁举例与分析(转)
    log4j的性能瓶颈定位与性能优化(org.apache.log4j.spi.RootLogger) (转)
    一个与Log4j相关的死锁(转)
    怎样取消shutdown关机命令?-shutdown命令的使用解析
    对软件体系结构的认识
    39个让你受益的HTML5教程
    5大AR应用窥探移动未来~你见过吗?
    Response.AddHeader使用实例
  • 原文地址:https://www.cnblogs.com/zhuohan123/p/3285999.html
Copyright © 2011-2022 走看看