POJ 1236 Network of Schools 强连通分量

2014-11-24 10:32:45 · 作者: · 浏览: 1

题意:提供一个路径为单向的校园网络,给出两个任务,第一个是至少要多少台电脑接受新软件才能让信息传遍整个校园网络,第二个是任务是问至少要加多少条边让多少点都彼此相通。

思路:第一个是求入度为零的强连通分量,第二个答案是入度为零的强连通分量数和出度为零的强连通分量数更大的那个。(tarjan的思路看看书,模板网上漫天飘!)

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include
         #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #define PI acos(-1.0) #define maxn 105 #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 init() { mem(head,-1); mem(dfn,0); mem(low,0); mem(belong,0); mem(instack,0); mem(in,0); mem(ou,0); A=B=top=cnt=tt=0; } int tarjan(int u) { dfn[u]=low[u]=++cnt; S.push(u); instack[u]=1; for(int i=head[u]; i!=-1; i=edge[i].next) { int v=edge[i].v; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(instack[v]&&dfn[v]