| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 6131 | Accepted: 2814 |
Description

Input
Output
Sample Input
1 2 5 4 3 1 3 2 3 4 3 5 0 1 2 2 3 3 4 4 5 5 1 0 1 2 2 3 3 4 4 6 6 3 2 5 5 1 0 0
Sample Output
Network #1 SPF node 3 leaves 2 subnets Network #2 No SPF nodes Network #3 SPF node 2 leaves 2 subnets SPF node 3 leaves 2 subnets
Source
#include <stdio.h>
#include <string.h>
#define maxn 1002
#define maxm maxn * maxn
/*
** vertex[i]用来存储若i为割点时能将图分割的块数
** sec是时间戳
** dfn[]存储到达节点的时间
** low[]存储节点i能到达的最早节点的时间
** sta[]存储点双连通分支
*/
int head[maxn], id, cas = 1, vertex[maxn], sec;
int dfn[maxn], low[maxn], n, sta[maxn], id2;
struct Node{
int to, next;
} E[maxm];
int max(int a, int b){
return a > b ? a : b;
}
int min(int a, int b){
return a < b ? a : b;
}
void initial()
{
id = n = id2 = sec = 0;
memset(head, -1, sizeof(head));
memset(vertex, 0, sizeof(vertex));
memset(dfn, 0, sizeof(dfn));
memset(low, 0, sizeof(low));
}
void addEdge(int u, int v)
{
E[id].to = v; E[id].next = head[u];
head[u] = id++; E[id].to = u;
E[id].next = head[v]; head[v] = id++;
}
void Tarjan(int pos, int father)
{
dfn[pos] = low[pos] = ++sec;
sta[id2++] = pos; int i;
for(i = head[pos]; i != -1; i = E[i].next){
if(E[i].to == father) continue; //过滤
if(!dfn[E[i].to]){
Tarjan(E[i].to, pos);
low[pos] = min(low[pos], low[E[i].to]); //更新low
if(dfn[pos] <= low[E[i].to]){
while(sta[--id2] != E[i].to) ; //同一分支出栈
++vertex[pos]; //子树+1
}
}else low[pos] = min(low[pos], low[E[i].to]); //更新low
}
}
void solve(int n)
{
int i, u, v, ok = 0;
Tarjan(1, 0); --vertex[1]; //根节点分支数要-1,输出时再+1
printf("Network #%d\n", cas++);
for(i = 1; i <= n; ++i){
if(vertex[i] > 0){
printf(" SPF node %d leaves %d subnets\n", i, vertex[i] + 1);
ok = 1;
}
}
if(ok == 0) printf(" No SPF nodes\n");
printf("\n");
}
int main()
{
//freopen("stdin.txt", "r", stdin);
int u, v; initial();
while(scanf("%d%d", &u, &v) != EOF){
n = max(u, n);
n = max(v, n);
if(0 == u){
solve(n); if(!v) break;
initial(); scanf("%d", &u);
n = max(u, n);
}
addEdge(u, v);
}
return 0;
}原文:http://blog.csdn.net/chang_mu/article/details/38844447