[cut point] ZOJ 1119 SPF
2010-06-20 00:47
405 查看
求割点及其分割的连通图数目
#include<cstdio> #include<vector> #include<memory> using namespace std; const int MaxN = 500; const int root = 1; vector<int>v[MaxN]; int a[MaxN]; int D[MaxN]; int cut[MaxN]; int c[MaxN]; void dfs(int k, int f, int d) { int i; int t; int tot(0); vector<int> :: iterator it; a[k] = d; D[k] = d; c[k] = 1; for (it=v[k].begin(); it!=v[k].end(); ++it) { t = *it; if (c[t] == 1) { a[k] = a[k] < D[t] ? a[k] : D[t]; } if (c[t] == 0) { dfs(t, k, d + 1); ++tot; a[k] = a[k] < a[t] ? a[k] : a[t]; if ((k == root && tot > 1) || (k != root && a[t] >= D[k])) { ++cut[k]; } } } c[k] = 2; } int main(void) { int x; int y; int i; int n; int case_num(1); bool find; scanf("%d", &x); while (1) { for (i=0; i<MaxN; ++i) { v[i].clear(); } n = 0; while (x != 0) { scanf("%d", &y); v[x].push_back(y); v[y].push_back(x); ++n; scanf("%d", &x); } memset(cut, 0, sizeof(cut)); memset(c, 0, sizeof(c)); dfs(root, root, 0); find = false; for (i=1; i<=n; ++i) { if (cut[i] != 0) { find = true; break; } } printf("Network #%d/n", case_num); ++case_num; if (find) { for (; i<=n; ++i) { if (cut[i] != 0) { printf(" SPF node %d leaves %d subnets/n", i, cut[i]+1); } } } else { printf(" No SPF nodes/n"); } scanf("%d", &x); if (x == 0) { break; } printf("/n"); } return 0; }
相关文章推荐
- POJ 1523、ZOJ 1119 SPF - from lanshui_Yang
- zoj 1119 SPF 无向图割点
- zoj 1119 SPF 无向图割点
- zoj 1119 /poj 1523 SPF
- zoj 1119 SPF (tarjan求割点的联通分量数)
- ZOJ 1119 SPF(割点)
- ZOJ1119(SPF)
- ZOJ - 1119 SPF
- ZOJ 1119 SPF(tarjan求割点)
- poj 1523 | zoj 1119 SPF
- ZOJ -- 1119 SPF(双连通求割点)
- zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)
- Zoj 1119 POJ 1523 SPF 求关节点及删除关节点会出现多少个连通分量 Tarjan算法
- zoj1119--双连通--寻找关节点---计算子网数
- zju 1119 SPF
- Zoj 1119
- ZOJ-1119
- zoj - 1940 - Dungeon Master
- ZOJ 3299 Fall the Brick (线段树)
- zoj - 1091 - Knight Moves(广度优先地图记数法)