标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8139 | Accepted: 3723 |
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
// // main.cpp // poj1523 // // Created by Candy on 9/26/16. // Copyright © 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=1e3+5,INF=1e9+5; inline int read(){ char c=getchar();int x=0,f=1; while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x; } int n=0,u,v,w,cas=0; struct edge{ int v,ne; }e[N*N]; int h[N],cnt=0; inline void ins(int u,int v){ cnt++; e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt; cnt++; e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt; } int pre[N],sn[N],dc=0; int dfs(int u,int fa){ int lowu=pre[u]=++dc,child=0; for(int i=h[u];i;i=e[i].ne){ int v=e[i].v; if(!pre[v]){ child++; int lowv=dfs(v,u); lowu=min(lowu,lowv); if(lowv>=pre[u]) sn[u]++;//,printf("v %d %d\n",u,v); }else if(pre[v]<pre[u]&&v!=fa) lowu=min(lowu,pre[v]); } if(fa==-1&&child==1) sn[u]=0; return lowu; } int main(int argc, const char * argv[]) { while((u=read())){ int root=0,flag=0; n=0; memset(h,0,sizeof(h)); cnt=0; memset(pre,0,sizeof(pre)); memset(sn,0,sizeof(sn)); v=read(); ins(u,v); n=max(n,max(u,v)); while((u=read())){ v=read(); ins(u,v); n=max(n,max(u,v)); root=u; } dfs(root,-1); if(sn[root]!=0) sn[root]--; printf("Network #%d\n",++cas); for(int i=0;i<=n;i++) if(sn[i]){ printf(" SPF node %d leaves %d subnets\n",i,sn[i]+1); flag=1; } if(!flag) printf(" No SPF nodes\n"); printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/candy99/p/5911237.html