zoukankan      html  css  js  c++  java
  • hdu 3594 仙人掌图

    思路:利用它的几条性质

    #include<set>
    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pb push_back
    #define mp make_pair
    #define Maxn 20010
    #define Maxm 2000010
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 100000
    #define lowbit(x) (x&(-x))
    #define clr(x,y) memset(x,y,sizeof(x))
    #define Mod 1000000007
    using namespace std;
    int dfn[Maxn],low[Maxn],id[Maxn],vi[Maxn],head[Maxn],use[Maxn],e,num,lab;
    void init()
    {
        clr(dfn,0);
        clr(low,0);
        clr(id,0);
        clr(vi,0);
        clr(use,0);
        clr(head,-1);
        e=num=lab=0;
    }
    struct Edge{
        int u,v,col,f,next;
    }edge[Maxm];
    void add(int u,int v)
    {
        edge[e].u=u,edge[e].v=v,edge[e].f=edge[e].col=0,edge[e].next=head[u],head[u]=e++;
    }
    int Tarjan(int u)
    {
        int i,v;
        dfn[u]=low[u]=++lab;
        vi[u]=1;
        for(i=head[u];i!=-1;i=edge[i].next){
            v=edge[i].v;
            if(use[v]) return 0;
            if(!dfn[v]){
                if(!Tarjan(v))
                    return 0;
                if(low[v]>dfn[u]) return 0;
                low[u]=min(low[u],low[v]);
            }
            if(vi[v])
                low[u]=min(low[u],dfn[v]);
        }
        use[u]=1;
        if(low[u]==dfn[u]){
            if(u!=1)
                return 0;
        }
        return 1;
    }
    int main()
    {
        int t,n,i,j,u,v;
        scanf("%d",&t);
        while(t--){
            init();
            scanf("%d",&n);
            while(scanf("%d%d",&u,&v),u|v){
                add(u,v);
            }
            //cout<<"ok"<<endl;
            int f=Tarjan(1);
            for(i=0;i<n;i++){
                if(!dfn[i]){
                    f=0;
                    break;
                }
            }
            if(f)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    使用Hibernate实现简单的增、改、删、查操作
    Hibernate 配置
    Win7/8下Oracle的安装
    Android从相册获取图片
    Android图片缓存分析(一)
    TextView淡入淡出效果
    Android动画全解
    ListView的getChildAt(i)方法
    AIDL小记
    自定义SeekBar的Thumb不对齐的解决方法。
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3327234.html
Copyright © 2011-2022 走看看