zoukankan      html  css  js  c++  java
  • ADERA3 省选模拟赛 SPOJ LMCONST

    这题zxr神犇当场ak了。。

    无限仰慕,用的是zxr神犇的方法,没有Riatre的~

    不加通道前时一棵树,然后根据这个再树上贪心就好了,反正我是没想到。。。

    View Code
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 
     7 #define N 111111
     8 #define M 555555
     9 
    10 using namespace std;
    11 
    12 int n,m,q,st,ed,cnt;
    13 int head[N],next[M],to[M];
    14 int out[N],outs[N],in[N],ins[N],c[N];
    15 bool fg;
    16 
    17 inline void add(int u,int v)
    18 {
    19     to[cnt]=v; next[cnt]=head[u]; head[u]=cnt++;
    20 }
    21 
    22 inline void read()
    23 {
    24     scanf("%d%d%d",&n,&m,&q);
    25     cnt=0;
    26     for(int i=0;i<=n;i++)
    27     {
    28         in[i]=out[i]=c[i]=0;
    29         head[i]=-1;
    30     }
    31     scanf("%d%d",&st,&ed); st++,ed++;
    32     outs[ed]=st; ins[st]=ed;
    33     in[st]++; out[ed]++;
    34     for(int i=1,a,b;i<=m;i++)
    35     {
    36         scanf("%d%d",&a,&b); a++,b++;
    37         add(a,b); add(b,a);
    38     }
    39     for(int i=1,a,b;i<=q;i++)
    40     {
    41         scanf("%d%d",&a,&b); a++,b++;
    42         outs[a]=b; ins[b]=a;
    43         out[a]++; in[b]++;
    44     }
    45 }
    46 
    47 inline void dfs(int u,int fa)
    48 {
    49     if(!fg) return;
    50     for(int i=head[u];~i;i=next[i])
    51     {
    52         if(to[i]==fa) continue;
    53         dfs(to[i],u);
    54         if(c[to[i]]==1)
    55         {
    56             outs[to[i]]=u; ins[u]=to[i];
    57             out[to[i]]++; in[u]++;
    58         }
    59         else if(c[to[i]]==-1)
    60         {
    61             outs[u]=to[i]; ins[to[i]]=u;
    62             out[u]++; in[to[i]]++;
    63         }
    64     }
    65     if(in[u]>1||out[u]>1) {fg=false;return;}
    66     c[u]=in[u]-out[u];
    67 }
    68 
    69 inline void go()
    70 {
    71     for(int i=1;i<=n;i++)
    72         if(in[i]>1||out[i]>1) {puts("IMPOSSIBLE");return;}
    73     fg=true;
    74     dfs(1,-1);
    75     
    76     if(!fg||c[1]!=0) {puts("IMPOSSIBLE");return;}
    77     for(int i=1;i<=n;i++)
    78         if(out[i]!=0)
    79         {
    80             out[i]--; in[outs[i]]--;
    81             for(int j=outs[i];j!=i;j=outs[j]) out[j]--,in[outs[j]]--;
    82             break;
    83         }
    84     
    85     for(int i=1;i<=n;i++)
    86         if(out[i]!=0) {puts("IMPOSSIBLE");return;}
    87     puts("POSSIBLE");
    88 }
    89 
    90 int main()
    91 {
    92     int cas; scanf("%d",&cas);
    93     while(cas--) read(),go();
    94     return 0;
    95 }
    没有人能阻止我前进的步伐,除了我自己!
  • 相关阅读:
    从yield关键字看IEnumerable和Collection的区别
    弹出框Fancybox使用详解
    几个不错的JQuery UI框架
    解决 IE6 position:fixed 固定定位问题
    autocomplete 应用(搜索提示框)
    HTML5 基础
    Cookie原理
    escape()、encodeURI()、encodeURIComponent()区别详解
    顶回Top
    移植mavlink协议到STM32详细教程
  • 原文地址:https://www.cnblogs.com/proverbs/p/2956852.html
Copyright © 2011-2022 走看看