标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 7110 | Accepted: 3242 |
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
#include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <queue> #include <typeinfo> #include <map> //#include<bits/stdc++.h> typedef long long ll; using namespace std; #define inf 10000000 inline ll read() { ll x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘)f=-1; ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘; ch=getchar(); } return x*f; } //*************************************************************** struct ss { int to,next; }e[1000001]; int dfn[1001],n,flag,low[1001],head[1001],cnt,t,iscut[1001]; void add(int u,int v) { e[t].to=v; e[t].next=head[u]; head[u]=t++; } void init(){ cnt=0; t=1; flag=0; n=0; memset(head,0,sizeof(head)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); } void tarjan(int x) { dfn[x]=low[x]=++cnt; for(int i=head[x];i;i=e[i].next) { if(!dfn[e[i].to]) { tarjan(e[i].to); low[x]=min(low[x],low[e[i].to]); if(dfn[x]<=low[e[i].to])iscut[x]++; } else low[x]=min(low[x],dfn[e[i].to]); } } int main() { int a,b; int oo=1; while(scanf("%d",&a)!=EOF) { if(a==0)break; init(); scanf("%d",&b); n=max(max(a,b),n); add(a,b); add(b,a); while(scanf("%d",&a)&&a) { scanf("%d",&b); n=max(max(a,b),n); add(a,b); add(b,a); } for(int i=1;i<=n;i++) { iscut[i]=1; } iscut[1]=0;///1为根必认定为割点 tarjan(1); printf("Network #%d\n",oo++); for(int i=1;i<=n;i++) { if(iscut[i]>=2){ flag=1; printf(" SPF node %d leaves %d subnets\n",i,iscut[i]); } } if(!flag){ printf(" No SPF nodes\n"); } printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zxhl/p/4743921.html