#include"stdio.h" #include"string.h" #include"stdlib.h" #include"stack" #define N 30000 using namespace std; int n,m; int index_s; int instack[N],DFN[N],LOW[N]; int belong[N],indegree[N],outdegree[N]; struct Eage { int from,to,next; }eage[2*N]; int tot,head[N]; void add(int a,int b) { eage[tot].from=a; eage[tot].to=b; eage[tot].next=head[a]; head[a]=tot++; } void getmap() { int i,l; int a,b; tot=0; memset(head,-1,sizeof(head)); while(m--) {scanf("%d%d",&a,&b);add(a,b);} } stackst; void Tarjan(int k) { int j,v; st.push(k); instack[k]=1; DFN[k]=LOW[k]=++index_s; for(j=head[k];j!=-1;j=eage[j].next) { v=eage[j].to; if(instack[v]) LOW[k]=LOW[k]>DFN[v]?DFN[v]:LOW[k]; else if(DFN[v]==-1) { Tarjan(v); LOW[k]=LOW[k]>LOW[v]?LOW[v]:LOW[k]; } } if(DFN[k]==LOW[k]) { do { j=st.top(); st.pop(); instack[j]=0; belong[j]=k; }while(j!=k); } } void getdegree() { int i,l; memset(indegree,0,sizeof(indegree)); memset(outdegree,0,sizeof(outdegree)); for(i=0;it2?t1:t2; if(n<1 || temp==1) ans=0; printf("%d\n",ans); } return 0; }