|
Belong[MAXN]; bool Instack[MAXN]; int top,scc,Index; int a[MAXN][2],b[MAXN][2],m; void init() { tot=0; memset(head,-1,sizeof(head)); } void addedge(int u,int v) { edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++; } void Tarjan(int u) { int v; Low[u]=DFN[u]=Index++; Instack[u]=true; Stack[top++]=u; for (int i=head[u];~i;i=edge[i].next) { int v=edge[i].to; if (!DFN[v]) { Tarjan(v); if (Low[u]>Low[v]) Low[u]=Low[v]; } else if (Instack[v]&&Low[u]>DFN[v]) Low[u]=DFN[v]; } if (Low[u]==DFN[u]) { scc++; do{ v=Stack[--top]; Instack[v]=false; Belong[v]=scc; }while (v!=u); } return ; } bool solvable(int n) { memset(DFN,0,sizeof(DFN)); memset(Instack,false,sizeof(Instack)); top=scc=Index=0; for (int i=0;i
>1; if (isok(mid,n)) { ans=mid; l=mid+1; } else r=mid-1; } printf(%d ,ans); } int main() { #ifndef ONLINE_JUDGE freopen(C:/Users/lyf/Desktop/IN.txt,r,stdin); #endif int i,j,n; while (scanf(%d%d,&n,&m)) { if (n==0&&m==0) break; for (i=0;i
?
?
?
?
|