标签:poj1523
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; }
标签:poj1523
原文地址:http://blog.csdn.net/chang_mu/article/details/38844447