poj1523赤裸裸的割点
2015-04-14 21:57
253 查看
这题真是没什么好说的。。。赤裸裸的求割点直接模板上
View Code
#include<cstdio> #include<cstring> #include<iostream> #include<vector> #define maxn 1100 using namespace std; vector<int> g[maxn]; int dfn[maxn],low[maxn]; int vis[maxn],cnt[maxn]; int k=1,f=0,index=0,m; void dfs(int x) { // cout<<"1"<<endl; int c=0; for(int i=0;i<g[x].size();i++) { int e=g[x][i]; if(vis[e]==0) { dfn[e]=low[e]=++index; vis[e]=1; dfs(e); low[x]=min(low[e],low[x]); if(low[e]>=dfn[x]) { cnt[x]++; } } else low[x]=min(low[x],dfn[e]); } } void solve() { f=index=0; memset(dfn,0,sizeof(dfn)); memset(cnt,0,sizeof(cnt)); memset(vis,0,sizeof(vis)); memset(low,0,sizeof(low)); printf("Network #%d\n",k++); vis[1]=1; dfn[1]=low[1]=++index; dfs(1); if(cnt[1]>=1) cnt[1]--; for(int i=1;i<=m;i++) { if(cnt[i]) { printf(" SPF node %d leaves %d subnets\n",i,cnt[i]+1); f=1; } } if(f==0) printf(" No SPF nodes\n"); printf("\n"); } int main() { int a,b; while(scanf("%d",&a)!=EOF) { for(int i=1;i<=maxn;i++) g[i].clear(); if(a==0) break; scanf("%d",&b); g[a].push_back(b); g[b].push_back(a); m=a<b?b:a; while(1) { int x,y; scanf("%d",&x); if(x==0) break; scanf("%d",&y); g[x].push_back(y); g[y].push_back(x); m=m>x?m:x; m=m>y?m:y; } solve(); } return 0; }
View Code
相关文章推荐
- POJ 1523 SPF 求割点的好(板子)题!
- 【tarjan双连通求割点&连通分量】POJ 1523
- poj 1523 (统计割点,及割点所分割的块数)
- POJ 1523——Tarjan + 计算删除割点后的连通分支数
- poj 1523 SPF 图论基础 图的割点
- (求割点和除去割点后的联通块数目) poj 1523
- poj 1523 求图的割点
- POJ 1523 SPF tarjan求割点模板
- POJ 1523 无向图的割点
- poj 1523 求无向图所有割点以及删除割点后连通分量个数 给出详细算法思路
- poj1523 SPF 双连通求割点
- poj1523割点&&块
- poj 1523(无向联通图的割点)
- poj1523割点模板
- poj 1523 求割点把一个图分成几个联通部分
- poj1523—SPF(tarjan算法求无向图中所有的割点)
- POJ 1523 SPF 无向图求割点
- poj 1523 SPF
- POJ 1523 Tarjan求割点
- POJ2117.Electricity——无向图的割点