int main() { freopen("t.in", "r", stdin); scanf("%d\n", &n); for(int i = 1, a, b; i < n; i ++) { scanf("%d %d\n", &a, &b); Add_Edge(a, b); Add_Edge(b, a); } dfs(1); for(int i = 1; i <= n; i ++) Update(start[i], exist[start[i]] ^= 1); scanf("%d\n", &m); while(m --) { char ctrl; int x; scanf("%c %d\n", &ctrl, &x); if(ctrl == 'C') { int v; exist[start[x]] ^= 1; if(exist[start[x]]) v = 1; else v = -1; Update(start[x], v); } else printf("%d\n", Sum(over[x]) - Sum(start[x] - 1)); } }
int main() { int m; while(scanf("%d%d",&n,&m)!=EOF) { char str[3]; getchar(); int x,y,c,top=-1; memset(vert,0,sizeof(vert)); while(m--) { scanf("%s%d%d",str,&x,&y);getchar(); if(str[0]=='P') { scanf("%d",&c);getchar(); Add_Edge(y,x,c,top); Add_Edge(x,y,-c,top); } else Add_Edge(y,x,1,top); } if(Spfa())puts("Reliable"); else puts("Unreliable"); } return 0; }
int main() { while(scanf("%d%d",&n,&m)!=EOF) { int top=-1; memset(vert,0,sizeof(vert)); while(m--) { int x,y; scanf("%d%d",&x,&y); Add_Edge(x,y,top);Add_Edge(y,x,top); } m=0; memset(par,-1,sizeof(par)); memset(color,0,sizeof(color)); DFS(1,0,1); printf("%d\n",Solve()); } return 0; }
int main() { int N, M, i, x, y, Cnt; scanf("%d %d", &N, &M); Init(N); for(i = 0; i < M; ++i) { scanf("%d %d", &x, &y); --x; --y; Add_Edge(x, y); Add_Edge(y, x); } for(i = 0; i < N; ++i) { if(!Visited[i]) { BFS(i); } } printf("%I64d\n", Ans); return 0; }
bool solve(int mid) { top=0; memset(vert,0,sizeof(vert)); memset(r_vert,0,sizeof(r_vert)); for(int i=0;i<mid;i++) { Add_Edge(door[i][0],oppo[door[i][1]]); Add_Edge(door[i][1],oppo[door[i][0]]); } memset(v,0,sizeof(v));top=0; memset(order,0,sizeof(order)); for(int i=0;i<2*n;i++) if(!v[i])DFS(i); memset(v,0,sizeof(v));top=1; memset(id,0,sizeof(id)); for(int i=2*n-1;i>=0;i--) if(!v[order[i]]){RG_DFS(order[i]);top++;} for(int i=0;i<2*n;i++) if(id[i]==id[oppo[i]])return false; return true; }
int main() { while(scanf("%d",&n)!=EOF) { int top=-1; memset(in,0,sizeof(in)); memset(vert,0,sizeof(vert)); for(int i=1;i<=n;i++) { int m,x; scanf("%d%d",&tim[i],&m); in[i]=m; for(int j=0;j<m;j++) { scanf("%d",&x); Add_Edge(x,i,top); } } printf("%d\n",topsort()); } return 0; }
int main() { int m,a,b; scanf("%d %d",&n,&m); S=0,T=2*n+1; for(int i=1;i<=m;i++) scanf("%d %d",&a,&b),g[a][b]=true; for(int i=1;i<=n;i++) { Dfs(i),flag[i]=false; for(int j=1;j<=n;j++) if(flag[j]==true) Add_Edge(j+n,i,0),Add_Edge(i,j+n,inf); memset(flag,false,sizeof(flag)); } for(int i=1;i<=n;i++) { Add_Edge(S,i,1),Add_Edge(i,S,0); Add_Edge(i,i+n,0),Add_Edge(i+n,i,inf); Add_Edge(i+n,T,1),Add_Edge(T,i+n,0); } printf("%d\n",n-Max_Flow()); return 0; }
int main() { while(scanf("%d",&n)!=EOF) { top=-1; for(int i=1;i<=n;i++)vert[i]=r_vert[i]=NULL; for(int i=1;i<=n;i++) { int j; while(scanf("%d",&j),j) Add_Edge(i,j); } top=1; memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++) if(!visit[i])DFS(i); top=0; memset(visit,0,sizeof(visit)); for(int i=n;i>0;i--) if(!visit[order[i]]){DFS_RG(order[i]);top++;} memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=1;i<=n;i++) for(edge *p=vert[i];p;p=p->next) if(id[i]!=id[p->to]) out[id[i]]++,in[id[p->to]]++; int m1=0,m2=0,m3=0; for(int i=0;i<top;i++) { if(in[i]==0&&out[i]==0)m3++; else if(!in[i])m1++; else if(!out[i])m2++; } printf("%d\n%d\n",m1+m3,m3+(m1>m2?m1:m2)); } return 0; }
int main() { int n; while(scanf("%d",&n),n) { m=0; int top=-1,maxi=-1,mini=1000000000; memset(flag,-1,sizeof(flag)); memset(vert, 0,sizeof(vert)); for(int i=0;i<n;i++) { scanf("%s",str); int len=strlen(str); int u=(str[0]-'a')*26+str[1]-'a'; int v=(str[len-2]-'a')*26+str[len-1]-'a'; if(flag[u]==-1)flag[u]=m++; if(flag[v]==-1)flag[v]=m++; Add_Edge(flag[u],flag[v],len,top); //Add_Edge(flag[v],flag[u],len,top); if(len>maxi)maxi=len; if(len<mini)mini=len; } double l=mini,r=maxi,mid; // printf("%d\n",sum); while(r-l>1e-4) { mid=(l+r)/2; //printf("try l,r,mid %.2lf %.2lf %.2lf\n",l,r,mid); if(Spfa(mid)) l=mid; else r=mid; //system("pause"); } if(l==mini)puts("No solution."); else printf("%.2lf\n",l); } return 0; }
int main() { int n; while(scanf("%d",&n),n) { m=0; int top=-1,sum=0; memset(flag,-1,sizeof(flag)); memset(vert, 0,sizeof(vert)); for(int i=0;i<n;i++) { scanf("%s",str); int len=strlen(str); int u=(str[0]-'a')*26+str[1]-'a'; int v=(str[len-2]-'a')*26+str[len-1]-'a'; if(flag[u]==-1)flag[u]=m++; if(flag[v]==-1)flag[v]=m++; Add_Edge(flag[u],flag[v],len,top); //Add_Edge(flag[v],flag[u],len,top); sum+=len; } double l=0,r=sum,mid; // printf("%d\n",sum); while(r-l>1e-6) { mid=(l+r)/2; //printf("try l,r,mid %.2lf %.2lf %.2lf\n",l,r,mid); if(Spfa(mid)) l=mid; else r=mid; //system("pause"); } printf("%.2lf\n",l); } return 0; }
int main() { while(scanf("%d",&n)!=EOF) { top=0; for(int i=0;i<2*n;i++){r_vert[i]=NULL;vert[i]=NULL;} for(int i=0;i<n;i++) { int a1,a2,b1,b2,c; scanf("%d:%d %d:%d %d",&a1,&a2,&b1,&b2,&c); a1=a1*60+a2; b1=b1*60+b2; start[zeros(i)]=a1; end[zeros(i)]=a1+c; start[ones(i)]=b1-c; end[ones(i)]=b1; } for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { int ii=i<<1,jj=j<<1; if(intersect(ii,jj)) { Add_Edge(ii,jj+1); Add_Edge(jj,ii+1); } if(intersect(ii,jj+1)) { Add_Edge(ii,jj); Add_Edge(jj+1,ii+1); } if(intersect(ii+1,jj)) { Add_Edge(ii+1,jj+1); Add_Edge(jj,ii); } if(intersect(ii+1,jj+1)) { Add_Edge(ii+1,jj); Add_Edge(jj+1,ii); } } } top=0; memset(v,0,sizeof(v)); for(int i=0;i<2*n;i++) if(!v[i])DFS(i); memset(v,0,sizeof(v)); for(int i=top-1;i>=0;i--) if(!v[order[i]])DFS_RG(order[i],order[i]); bool flag=false; for(int i=0;i<n;i++) if(id[zeros(i)]==id[ones(i)]){flag=true; break;} if(flag) puts("NO"); else{ puts("YES"); Display(); } } return 0; }