• poj2186--tarjan+缩点


    题目大意:

          每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这
    种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头
    牛被所有的牛认为是受欢迎的。
     
          先用tarjan求出每个强连通分量,再缩点,统计每个点的出度,如果有且只有1个出度为0的点,就输出这个点包含的节点数,否则输出0.
     
    证明:
          如果有强连通分量被孤立(即和其他强连通分量无边相连),那么答案一定是0,此时由于缩点后是一个DAG图,出度为0的点的个数一定大于1.
          如果没有点被孤立,当出度为0的点多于1个时,由DAG图的性质可得,一定不存在一个点能从其他所有点到达。只有当出度为0的点的个数等于1时,这个出度为0的点才能被其他所有点到达。
    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<string.h>
    #include<cmath>
    using namespace std;
    vector<int>g[10010];
    int n,m,x,y,i,j,v,c[10010],l=0,low[10010],dfn[10010],f[10010],cnt=0,out0[10010],sum[10010],time_clock=0;
    void tarjan(int u){
        low[u]=dfn[u]=++time_clock;
        c[++l]=u;
        for(int i=0;i<g[u].size();++i){
            v=g[u][i];
            if(!dfn[v]){
                tarjan(v);
                low[u]=min(low[u],low[v]);
            }else if(!f[v])low[u]=min(low[u],dfn[v]);
        }
        if(low[u]==dfn[u]){
            int len=l;
            cnt++;
            while(c[l]!=u)f[c[l--]]=cnt;
            f[c[l--]]=cnt;
            sum[cnt]=len-l;
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(i=1;i<=m;++i){
            scanf("%d%d",&x,&y);
            g[x].push_back(y);
        }
        memset(dfn,0,sizeof(dfn));
        for(i=1;i<=n;++i)if(!dfn[i])tarjan(i);
        for(i=1;i<=n;++i)
        for(j=0;j<g[i].size();++j){
            v=g[i][j];
            if(f[i]!=f[v])out0[f[i]]++;
        }
        x=0;
        for(i=1;i<=cnt;++i)
        if(!out0[i]){
            if(x>0){
                printf("0");
                return 0;
            }
            x=sum[i];
        }
        printf("%d",x);
        return 0;
    }
  • 相关阅读:
    前端 jquery获取当前页面的URL信息
    PHP合并数组及去重,PHP检测一个数组中有几个相同的
    ThinkPHP缓存技术(S(),F(),查询缓存,静态缓存)
    php 检测url
    ThinkPHP函数详解:F方法
    图片查看器(图片放大缩小功能)
    Thinkphp路由配置和静态缓存规则【原创】
    mySQL-CRUD操作(数据库的增删改查)练习题
    mySQL CRUD操作(数据库的增删改查)
    初识mySQL(关系型数据库)
  • 原文地址:https://www.cnblogs.com/gjghfd/p/5615280.html
Copyright © 2020-2023  润新知