POJ 2186 Popular Cows 强连通分量

2014-11-24 10:37:36 · 作者: · 浏览: 0

题意:给出若干对大牛A仰慕大牛B,并且仰慕可以传递,问有多少个大牛被除本身之外的所有大牛仰慕。

思路:先tarjan缩点,找出每个强连通分量出度和入度,如果有强连通分量出度入度都为零或者有超过一个强连通分量的出度为零,就没有大牛满足条件,否则答案就是出度为零的强连通分量的结点数。

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include
         #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #define PI acos(-1.0) #define maxn 10005 #define INF 1<<25 #define MAX 0x7fffffff #define mem(a,b) memset(a,b,sizeof(a)) #define f(i,a,b) for(i=a;i
                
                  S; int tarjan(int u) { dfn[u]=low[u]=++cnt; S.push(u); ins[u]=1; for(int i=head[u]; i!=-1; i=edge[i].next) { v=edge[i].v; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(ins[v]&&dfn[v]