#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
const int gray=1;
const int white=0;
const int black=2;
const int v_num=1000;
const int start=0;
int graph[v_num][v_num];
int color[v_num];
int Time;
int discoverTime[v_num];
int rem[v_num];
int bicompDFS(int v)
{
color[v]=gray;
Time++;
int back=discoverTime[v]=Time;
for(int w=0;w<v_num;w++)
{
if(graph[v][w]==0)
continue;
if(color[w]==white)
{
if(v==start)
rem[v]++;
int wBack=bicompDFS(w);
if(wBack>=discoverTime[v])
{
if(v==start)
;
else
rem[v]++;
}
back=min(back,wBack);
}
else if(color[w]==gray)
{
back=min(discoverTime[w],back);
}
}
color[v]=black;
return back;
}
int main()
{
freopen("input.txt","r",stdin);
//init
int n=1;
while(true)
{
for(int i=0;i<v_num;i++)
{
memset(graph[i],0,sizeof(int)*v_num);
color[i]=white;
rem[i]=1;
}
rem[0]=0;
int v1,v2;
int temp=0;
while(scanf("%d",&v1)&&v1!=0)
{
temp++;
scanf("%d",&v2);
graph[v1-1][v2-1]=graph[v2-1][v1-1]=1;
// printf("%d %d\n",v1,v2);
}
if(v1==0&&temp==0)
return 0;
Time=0;
bicompDFS(start);
printf("Network #%d\n",n++);
bool flag=false;
for(int i=0;i<v_num;i++)
{
if(rem[i]>1)
{
printf(" SPF node %d leaves %d subnets\n",i+1,rem[i]);
flag=true;
}
}
if(flag==false)
printf(" No SPF nodes\n");
printf("\n");
}
return 0;
}
poj1523
最新推荐文章于 2019-07-09 23:16:38 发布