poj2186 Popular Cows --- 强连通

2015-07-24 05:38:38 · 作者: · 浏览: 7

给一个有向图,问有多少结点是其他所有结点都可以到达的。

等价于,在一个有向无环图上,找出度为0 的结点,如果出度为0的结点只有一个,那么这个就是答案,如果大于1个,则答案是0。

这题有环,所以先缩点。求唯一出度为0的强连通分量。


#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #define inf 0x3f3f3f3f using namespace std; #define M 10010//图中点数 int sta[M],top; bool vis[M]; int dfn[M]; int low[M]; int ccnt; //有向图强连通分量个数 int id; vector
       
         e[M]; vector
        
          part[M];//每个联通块的组成 int inpart[M];//每个原图上的点在哪个联通块里 int n,m,out[M]; void tarjan(int x) { int i,j; dfn[x]=low[x]=id++; vis[x]=1; sta[++top]=x; for(i=0;i
         
          1)//大于一个出度为0的点 则没有符合条件的答案 { ans=0; break; } } printf("%d\n",ans); } return 0; }