zoukankan      html  css  js  c++  java
  • [poj] 2618 popular cows

    原题

    这是一个强连通分量板子题。
    a thinks b is popular 即为a到b有一条边,要求被所有牛popular的牛的个数。
    所求为对图进行强连通分量缩点后,没有出度的强连通分量里的点数(这样的强连通分量只能有一个)。

    #include<cstdio>
    #include<algorithm>
    #include<stack>
    #define N 10010
    #define M 50010
    using namespace std;
    int n,m,head[N],dfn[N],low[N],cnt=1,t,sum,bel[N],num[N],out[N],ans;
    bool instk[N];
    stack <int> stk;
    struct hhh
    {
        int to,next;
    }edge[M];
    
    int read()
    {
        int ans=0,fu=1;
        char j=getchar();
        for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
        if (j=='-') fu=-1,j=getchar();
        for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
        return ans*fu;
    }
    
    void add(int u,int v)
    {
        edge[cnt].to=v;
        edge[cnt].next=head[u];
        head[u]=cnt++;
    }
    
    void Tarjan(int x)
    {
        dfn[x]=low[x]=++t;
        stk.push(x);
        instk[x]=1;
        int v;
        for (int i=head[x];i;i=edge[i].next)
        {
    	v=edge[i].to;
    	if (!dfn[v])
    	{
    	    Tarjan(v);
    	    low[x]=min(low[x],low[v]);
    	}
    	else if (instk[v]) low[x]=min(low[x],dfn[v]);
        }
        if (dfn[x]==low[x])
        {
    	sum++;
    	do
    	{
    	    v=stk.top();
    	    stk.pop();
    	    instk[v]=0;
    	    bel[v]=sum;
    	    num[sum]++;
    	}while(v!=x);
        }
    }
    
    int main()
    {
        n=read();
        m=read();
        for (int i=1,a,b;i<=m;i++)
        {
    	a=read();
    	b=read();
    	add(a,b);
        }
        for (int i=1;i<=n;i++)
    	if (!dfn[i]) Tarjan(i);
        for (int i=1;i<=n;i++)
    	for (int j=head[i],v;j;j=edge[j].next)
    	{
    	    v=edge[j].to;
    	    if (bel[i]!=bel[v]) out[bel[i]]++;
    	}
        for (int i=1;i<=sum;i++)
        {
    	if (!out[i] && ans)
    	{
    	    ans=0;
    	    break;
    	}
    	else if (!out[i]) ans=num[i];
        }
        printf("%d",ans);
        return 0;
    }
    
    
  • 相关阅读:
    如何获得RVA(相对虚地址)的值,从而得到一个程序的入口点
    Prism 问题总结一: 在模块中引用公用程序集出错
    Dapper 操作 ACCESS 数据库问题总结
    我国土地招拍挂制度
    [导入]棋味
    [导入]无语
    [导入]心灯
    [导入]寄托
    [导入]视频资源
    [导入]asp.net实现视频截图
  • 原文地址:https://www.cnblogs.com/mrha/p/7840544.html
Copyright © 2011-2022 走看看