• Light OJ 1168 Wishing Snake


    http://www.lightoj.com/volume_showproblem.php?problem=1168

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 using namespace std;
      5 #define N 1005
      6 struct{
      7     int y,next;
      8 }ee[10*N];
      9 struct{
     10     int a,b;
     11 }mes[10*N];
     12 int link[N],dfn[N],low[N],pos[N],stack[N],t,st,bct,ind,in[N],out[N];
     13 bool vis[N],instack[N],inn[N];
     14 void init()
     15 {
     16     memset(link,0,sizeof(link));
     17     memset(inn,0,sizeof(inn));
     18     memset(out,0,sizeof(out));
     19     memset(vis,0,sizeof(vis));
     20     memset(instack,0,sizeof(instack));
     21     memset(in,0,sizeof(in));
     22     t=0,st=0,bct=0,ind=0;
     23 }
     24 void tarjan(int rt)
     25 {
     26     low[rt]=dfn[rt]=++ind;
     27     vis[rt]=instack[rt]=1;
     28     stack[++st]=rt;
     29     for(int i=link[rt];i;i=ee[i].next){
     30         if(!vis[ee[i].y]){
     31             tarjan(ee[i].y);
     32             low[rt]=min(low[rt],low[ee[i].y]);
     33         }
     34         else if(instack[ee[i].y]){
     35             low[rt]=min(low[rt],dfn[ee[i].y]);
     36         }
     37     }
     38     if(low[rt]==dfn[rt]){
     39         bct++;
     40         while(1){
     41             int c=stack[st];
     42             pos[c]=bct;
     43             instack[c]=0;
     44             st--;
     45             if(c==rt)break;
     46         }
     47     }
     48 }
     49 void insert(int a,int b)
     50 {
     51     ee[++t].y=b;
     52     ee[t].next=link[a];
     53     link[a]=t;
     54 }
     55 void rebuild(int m)
     56 {
     57     memset(link,0,sizeof(link));
     58     t=0;
     59     for(int i=1;i<=m;i++){
     60         if(pos[mes[i].a]!=pos[mes[i].b]){
     61             insert(pos[mes[i].a],pos[mes[i].b]);
     62             out[pos[mes[i].a]]++;
     63             in[pos[mes[i].b]]++;
     64         }
     65     }
     66 }
     67 int main()
     68 {
     69     int tt,cas=1;
     70     scanf("%d",&tt);
     71     while(tt--){
     72         int n,m=0,k;
     73         init();
     74         inn[0]=1;
     75         scanf("%d",&n);
     76         for(int i=1;i<=n;i++){
     77             scanf("%d",&k);
     78             while(k--){
     79                 int a,b;
     80                 scanf("%d%d",&a,&b);
     81                 insert(a,b);
     82                 inn[a]=1;
     83                 inn[b]=1;
     84                 m++;
     85                 mes[m].a=a,mes[m].b=b;
     86             }
     87         }
     88         for(int i=0;i<1000;i++)
     89         if(!vis[i]&&inn[i])
     90             tarjan(i);
     91         if(bct==1){
     92             printf("Case %d: YES
    ",cas++);
     93             continue;
     94         }
     95         rebuild(m);
     96        
     97         if(in[pos[0]]!=0||out[pos[0]]==0){
     98             printf("Case %d: NO
    ",cas++);
     99             continue;
    100         }
    101         int cnt1=0,cnt2=0,cnt3=0;
    102         for(int i=1;i<=bct;i++){
    103             if(in[i]==0&&out[i]==1){
    104                 cnt1++;
    105             }
    106             else if(in[i]==1&&out[i]==0){
    107                 cnt2++;
    108             }
    109             else if(in[i]==1&&out[i]==1)
    110                 cnt3++;
    111         }
    112         if(cnt1==1&&cnt2==1&&cnt1+cnt2+cnt3==bct)
    113         printf("Case %d: YES
    ",cas++);
    114         else
    115         printf("Case %d: NO
    ",cas++);
    116     }
    117     return 0;
    118 }
    AC Code
  • 相关阅读:
    计算SQL语句运行速度
    SQL 分页 语句
    RDLC 显示 错误号 的解决办法
    ASP.NET 编写控件的一些常用属性
    自己写的JS数组插入方法
    javascript textarea MaxLength 属性的实现
    table 样式
    AviCap
    C# 遍历枚举
    JS 获取网页内容高度 和 网页可视高度 支持IE 6789 Firefox Chrome
  • 原文地址:https://www.cnblogs.com/kim888168/p/3309635.html
Copyright © 2020-2023  润新知