您的位置:首页 > 其它

hdu 1269 迷宫城堡&nbsp…

2013-08-08 23:59 465 查看
//hdu 1269 迷宫城堡 tarjan算法求极大连通子图

#include

#include

#include

using namespace std;

#define max 11000

vector V[max];

int n,m,top,index,ans;

int instack[max],stack[max],visit[max];

int dfn[max],low[max];

void init()

{

   top=ans=0;

   index=1;

   for(int i=0;i

     
V[i].clear();

     
visit[i]=0;

     
instack[i];

   }

}

void tarjan(int u)

{

   int i,j,v;

   dfn[u]=low[u]=index++;

   stack[top++]=u;

   visit[u]=1;

   instack[u]=1;

   for(i=0;i

     
v=V[u][i];

     
if(!visit[v]){

         
tarjan(v);

         
low[u]=min(low[u],low[v]);

     
}

     
if(instack[v])

        
low[u]=min(low[u],dfn[v]);

   }

   if(dfn[u]==low[u]){

     
do{

           
j=stack[top-1];

           
instack[j]=0;

           
top--;

     
}while(j!=u);

     
ans++;

   }

   if(ans>1)return;

}                 

int main()

{

    int
i,j,x,y;

   
while(scanf("%d%d",&n,&m),n+m){

      
init();

      
for(i=1;i<=m;i++){

        
scanf("%d%d",&x,&y);

        
V[x].push_back(y);

      
}

      
for(i=1;i<=n;i++){

        
if(!visit[i])

           
tarjan(i);

        
if(ans>1)break;

      
}

      
if(ans==1||n==1)

        
printf("Yes\n");

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: