标签:
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
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define ll long long #define mod 1000000007 #define inf 999999999 int scan() { int res = 0 , ch ; while( !( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) ) { if( ch == EOF ) return 1 << 30 ; } res = ch - ‘0‘ ; while( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) res = res * 10 + ( ch - ‘0‘ ) ; return res ; } int dfn[1010]; int low[1010]; int head[1010]; int ans[1010]; int visit[1010]; int index,root,son,node,jiedge; struct is { int u,v; int next; }edge[1010]; void add(int x,int y) { jiedge++; edge[jiedge].u=x; edge[jiedge].v=y; edge[jiedge].next=head[x]; head[x]=jiedge; jiedge++; edge[jiedge].u=y; edge[jiedge].v=x; edge[jiedge].next=head[y]; head[y]=jiedge; } void dfs(int u) { for(int i=head[u];i;i=edge[i].next) { int v=edge[i].v; if(visit[v]==0) { visit[v]=1;++index; dfn[v]=low[v]=index; dfs(v); low[u]=min(low[u],low[v]); if(low[v]>=dfn[u]) { if(u==root) son++; else ans[u]++; } } else low[u]=min(low[u],dfn[v]); } } void trajan() { memset(visit,0,sizeof(visit)); memset(ans,0,sizeof(ans)); index=1; root=1; son=0; low[1]=dfn[1]=1; visit[1]=1; dfs(1); } int main() { int u,v; int flag=0; while(scanf("%d",&u)!=EOF) { memset(head,0,sizeof(head)); jiedge=0; node=0; if(u==0) break; scanf("%d",&v); node=max(node,u); node=max(node,v); add(u,v); while(1) { scanf("%d",&u); if(u==0) break; scanf("%d",&v); add(u,v); node=max(node,u); node=max(node,v); } trajan(); int kk=1; if(flag!=0) printf("\n"); printf("Network #%d\n",++flag); if(son>1) { kk=0; printf(" SPF node %d leaves %d subnets\n",1,son); } for(int i=2;i<=node;i++) { if(ans[i]) { kk=0; printf(" SPF node %d leaves %d subnets\n",i,ans[i]+1); } } if(kk) printf(" No SPF nodes\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5380772.html