poj1144(求割顶模板题)
2014-09-09 23:35
302 查看
题意:求割顶个数,模板题不解释
代码如下:
代码如下:
#include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #include<cstring> #include<string> #include<vector> #define inf 0x3f3f3f3f #define pi acos(-1.0) #define eps 10e-6 #define N 105 using namespace std; char s[10000]; vector<int> G ; int pre ,iscut ,low ; int dfs_clock; int dfs(int u,int fa) { int lowu = pre[u] = ++dfs_clock; int child = 0,len = G[u].size(); for(int i = 0; i < len; i++) { int v = G[u][i]; if(!pre[v]) { child++; int lowv = dfs(v,u); lowu = min(lowu,lowv); if(lowv >= pre[u]) iscut[u] = 1;//如果是u是割点则标记为1 } else if(pre[v] < pre[u] && v != fa) lowu = min(lowu,pre[v]); } if(fa < 0 && child == 1) iscut[u] = 0; low[u] = lowu;//可以不用low数组 return lowu; } int main() { int n; while(scanf("%d",&n) && n) { getchar(); int i; for(i = 0; i <= n; i++) G[i].clear(); int u,v; while(scanf("%d",&u),u)//注意输入问题 { while (getchar()!='\n') { scanf("%d",&v); G[u].push_back(v); G[v].push_back(u); } } dfs_clock = 0; memset(iscut,0,sizeof(iscut)); memset(pre,0,sizeof(pre)); dfs(1,-1); int cnt = 0; for(i = 1; i <= n; i++) if(iscut[i] == 1) cnt++; printf("%d\n",cnt); } return 0; }
相关文章推荐
- POJ1144-Network(割顶模板题)
- 洛谷P3388 【模板】割点(割顶)(tarjan求割点)
- 洛谷P3388 【模板】割点(割顶)
- luogu P3388 【模板】割点(割顶)
- 【模板】无向图的割顶
- POJ1144-NetWork(无向图的割顶)
- 图论算法-Tarjan模板 【缩点;割顶;双连通分量】
- 洛谷3388 割点(割顶)模板
- 洛谷—— P3388 【模板】割点(割顶)
- 图论模板 求割顶/判断二分图
- 图论模板 求割顶/判断二分图
- poj1144 求图的割点--模板
- 无向图的割顶和桥(tarjan模板)
- (模板)割点(割顶)tarjan类算法
- 洛谷3388 【模板】割点(割顶)
- 【模板】割点(割顶)
- poj 1144 Network【无向图求割顶模板题】
- P3388 【模板】割点(割顶)
- poj1144 Network(割顶)
- P3388 【模板】割点(割顶)