标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 11042 | Accepted: 5100 |
Description
Input
Output
Sample Input
5 5 1 2 3 4 0 6 2 1 3 5 4 6 2 0 0
Sample Output
1 2
Hint
#include<stdio.h> #include<string.h> #include<stack> #include<algorithm> #define MAX 1100 #define MAXM 2000100 #define INF 0x7fffff using namespace std; struct node { int beg,end,next; }edge[MAXM]; int low[MAX],dfn[MAX]; int head[MAX],ans; int dfsclock; int iscut[MAX]; void init() { ans=0; memset(head,-1,sizeof(head)); } void add(int u,int v) { edge[ans].beg=u; edge[ans].end=v; edge[ans].next=head[u]; head[u]=ans++; } void tarjan(int u,int fa) { int v,i; low[u]=dfn[u]=++dfsclock; int son=0; for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].end; if(!dfn[v]) { son++; tarjan(v,u); low[u]=min(low[u],low[v]); if(u!=fa&&dfn[u]<=low[v]) iscut[u]=1; } else low[u]=min(dfn[v],low[u]); } if(fa==u&&son>1) iscut[u]=1; } void find(int l,int r) { memset(low,0,sizeof(low)); memset(dfn,0,sizeof(dfn)); memset(iscut,0,sizeof(iscut)); dfsclock=0; for(int i=l;i<=r;i++) { if(!dfn[i]) tarjan(i,i); } } int main() { int n,m,j,i,t; int a,c,len; char b; char s[5010]; while(scanf("%d",&n),n) { init(); int sum=0; while(scanf("%d", &a), a) { while(getchar() != ‘\n‘) { scanf("%d", &c); add(a,c); add(c,a); } } // while(scanf("%d",&a),a) 我真的搞不懂我这个输入错在哪里一直wa // { // while(scanf("%c",&b)&&b!=‘\n‘) // { // c=b-‘0‘; // add(a,c); // add(c,a); // } // } find(1,n); for(i=1;i<=n;i++) { if(iscut[i]) sum++; } printf("%d\n",sum); } return 0; }
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4890572.html