POJ 1523 割点
来源:互联网 发布:莫言作品 知乎 编辑:程序博客网 时间:2024/05/01 17:03
//翻译见图论书390页
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;#define MIN(a,b) ((a)<(b)?(a):(b))int mp1[1005];int mp2[1005];int g[1005][1005];int n;int low[1005];int visit[1005];int cnt;struct solve{int a;int b;};bool cmp(solve s1,solve s2){return mp2[s1.a]<mp2[s2.a];}solve s[1000];int solcnt;void dfs(int v){int res=0;low[v]=visit[v]=cnt++;for(int i=1;i<=n;i++){if(g[v][i]){if(visit[i]==0){dfs(i);if(low[i]>=visit[v]){res++;}else{low[v]=MIN(low[i],low[v]);}}else{low[v]=MIN(low[v],visit[i]);}}}if(res>0){s[solcnt].a=v;s[solcnt].b=res+1;solcnt++;}}void spf(){cnt=1;memset(visit,0,sizeof(visit));visit[1]=low[1]=cnt++;int r=0;for(int i=2;i<=n;i++){if(g[1][i]&&visit[i]==0){r++;dfs(i);}}if(r>1){s[solcnt].a=1;s[solcnt].b=r;solcnt++;}sort(s,s+solcnt,cmp);}int main(){int a,b=0;memset(g,0,sizeof(g));int cse=1;while(scanf("%d",&a)){if(a==0){if(b==0){break;}else{solcnt=0;spf();b=0;n=0;memset(g,0,sizeof(g));printf("Network #%d\n",cse++);if(solcnt==0){printf(" No SPF nodes\n");}for(int i=0;i<solcnt;i++){printf(" SPF node %d leaves %d subnets\n",mp2[s[i].a],s[i].b);}printf("\n");memset(mp1,0,sizeof(mp2));memset(mp2,0,sizeof(mp2));continue;}}scanf("%d",&b);if(mp1[a]==0){mp1[a]=++n;mp2[n]=a;}if(mp1[b]==0){mp1[b]=++n;mp2[n]=b;}g[mp1[a]][mp1[b]]=g[mp1[b]][mp1[a]]=1;}return 0;}
- POJ 1523 割点
- poj 1523 割点
- POJ 1523 割点
- [割点] poj 1523 SPF
- poj 1523 割点分块
- POJ-1523 SPF 割点
- 【POJ】1523 SPF 割点
- POJ - 1523 SPF(割点)
- POJ--1523 SPF(割点)
- POJ 1523 SPF【割点】
- POJ 1523 SPF 割点
- POJ 1523 SPF 割边与割点
- POJ 1523 SPF(割点所割连通分量数)
- POJ 1523 SPF(割点所割连通分量数)
- POJ 1523 SPF(割点所割连通分量数)
- POJ 1523 SPF (割点)
- Poj 1523 SPF(割点 + tarjan算法)
- TOJ 2018 POJ 1523 SPF / 割点
- 一些开源项目网址
- C语言的那些小秘密——链表二(转bigloomy)
- 图的重构拓展之最小表示法
- hdu3791二叉搜索树
- 同步、异步电路 2012_07_28
- POJ 1523 割点
- ArcMap中使用Python遇到中文字段名错误的解决方法
- ASP.NET缓存总结
- 详细解析boost中bind的实现 .
- 一个数据收集进度条的实现
- iOS应用安全堪忧
- C#索引器
- pandaboard移植prebuilt版的androidb
- 谈谈对程序员的培养