int main() { int cas; cin >> cas; for(int i = 0;i < cas;i++) { cin >> n >> m >> c; init(); read(); printf("Case #%d: ",i+1); cout << spfa() << endl; } return 0; }
void work() { for(int i=1;i<=n;++i) { // printf("%d\n",i); memset(canuse,true,sizeof(canuse)); for(int j=1;j<=n;++j) if(L[j]>L[i]||L[j]<L[i]-m) canuse[j]=false; // for(int j=1;j<=n;++j) printf("%d ",canuse[j]); // printf("\n"); ans=min(ans,spfa(0,i)); } printf("%d\n",ans); }
void work() { l=0,r=10000.0; while(r-l>0.0001) { mid=0.5*(l+r); // printf("%.4lf %.4lf\n",l,r); if(spfa(mid)) r=mid; else l=mid; } printf("%.3lf\n",l); }
pair<long long,long long> getmcmf(int sz,int source,int sink,int times){ pair<long long,long long> res; res.first=0;res.second=0;n=sz; if(!times) times=-1; while(times){ spfa(source,sink); if(d[sink][1] == 0) break; res.first += d[sink][1]; res.second += d[sink][0] * d[sink][1]; track(sink,source,(int)d[sink][1]); times--; } return res; }
int main(){ int Q; scanf("%d %d",&n,&Q); for (int i=1;i<n;++i){ int x,y,w; scanf("%d %d %d",&x,&y,&w); AddEdge(x,y,w); } for (;Q;Q--){ scanf("%d %d",&S,&T); printf("%d\n",spfa()); } return 0; }
int main(){ scanf("%d%d%d",&n,&a,&b); if (a==b) {puts("0");return 0;} for (int i=1;i<=n;++i) { scanf("%d",K+i); if (i+K[i]<=n)g.AddEdge(i,i+K[i]); if (i-K[i]>0)g.AddEdge(i,i-K[i]); } memset(dist,60,sizeof(dist)); int max=dist[1]; spfa(); if (dist[b]!=max) printf("%d\n",dist[b]);else puts("-1"); return 0; }
void costflow(){ s=0;t=202; while (spfa()){ ans+=dist[t]; int flow=0x7fffffff; for (int k=Path[t];k;k=Path[g.U[k]]){ if (flow>g.Cap[k]) flow=g.Cap[k]; } for (int k=Path[t];k;k=Path[g.U[k]]){ g.Cap[k]-=flow; g.Cap[k^1]+=flow; } } }
void mcmf(int s,int t) { maxflow = 0; mincost = 0; while(1 == spfa(s,t)) { int aug = INF; for(int v = t;v != s;v = pre[v]) aug = min(aug, edge[pe[v]].cap); maxflow += aug; mincost += dist[t] * aug; for(int v = t;v != s;v = pre[v]) { edge[pe[v]].cap -= aug; edge[pe[v]^1].cap += aug; } } }
inline void solve() { for(int i = 1; i <= n; ++i) f[i] = INF; f[s] = 0;sort(e+1, e+m+1); for(int i = m; i >= 1; --i) { G.add_edge(e[i].u, e[i].v, e[i].d); if(f[e[i].u] > f[e[i].v]) swap(e[i].u, e[i].v); if(max(f[e[i].u], e[i].d) >= f[e[i].v]) continue; if(f[e[i].u] == INF) continue; spfa(e[i].u); if((long long)f[t]*ay < (long long)ax*e[i].d) ax = f[t], ay = e[i].d; } }
void mcmf(){ int mc = 0; while(!spfa()){ int ff = 1; //for(int i=p[n+n+1]; ~i; i=p[e[i].u]) // ff = ff<e[i].f ? ff : e[i].f; for(int i=p[n+n+1]; ~i; i=p[e[i].u]){ e[i].f -= ff; e[i^1].f += ff; } mc += ff * (10000 - cost[n+n+1]); } printf("%d\n", mc); }
int main() { int m, a, b, c; while(scanf("%d %d", &n, &m) != EOF) { memset(first, -1, sizeof(first)); tot = 0; while(m--) { scanf("%d %d %d", &a, &b, &c); add(a, b, c); } spfa(); } return 0; }
int main(int argc, const char *argv[]) { int i, j, k, l, m; ms(head, -1), ms(next, -1), ms(visit, 0); scanf("%i %i", &n, &m); for (i = 0; i < m; ++i) { scanf("%i %i %i", &j, &to[i], &value[i]); next[i] = head[j]; head[j] = i; } if (spfa(1) || d[n] < 0) { printf(fail); } else { printf("%i", d[n]); } return 0; }
PII flow() { PII ret(0, 0); while(spfa()) { int delta = Inf; for(int x = n - 1; x; x = pre[x]) { delta = std::min(delta, cap[pre[x]][x]); } for(int x = n - 1; x; x = pre[x]) { cap[pre[x]][x] -= delta; cap[x][pre[x]] += delta; } ret.first += delta; ret.second += dis[n - 1] * delta; } return ret; }
int main() { scanf("%d%d%d",&n,&p,&k); for (int i=1;i<=p;++i) { int x,y,w; scanf("%d%d%d",&x,&y,&w); g.AddEdge(x,y,w); } spfa(); int ans=0x7fffffff; for (int i=0;i<=k;++i) { if (ans>f[n][i]) ans=f[n][i]; } printf("%d\n",ans); return 0; }
int mincost_maxflow() { int max = 0, i, j, t; while (spfa()) { i = n; while (pre[i] != -1) { t = pre[i]; e[t].f--; e[e[t].op].f++; e[e[t].op].c = -e[t].c; i = e[t].u; } max += -d[n]; } return max; }
int main() { int m,q; scanf("%d%d%d",&n,&m,&q); while(m--) { int a,b,d;scanf("%d%d%d",&a,&b,&d); inlink(a,b,d); // a - b >= -d } while(q--) { int a,b,d;scanf("%d%d%d",&a,&b,&d); inlink(b,a,-d); // b - a >= d } for(int i=2;i<=n;i++) inlink(i,i-1,0);// i - (i-1) >= 0 printf("%d\n",spfa()); return 0; }
pair <long long, long long> solve(){ int i, j; long long mincost = 0, maxflow = 0; while (spfa()){ long long aug = INF; for (i = t, j = from[i]; i != s; i = adj[j ^ 1], j = from[i]){ aug = min(aug, cap[j] - flow[j]); } for (i = t, j = from[i]; i != s; i = adj[j ^ 1], j = from[i]){ flow[j] += aug, flow[j ^ 1] -= aug; } /// change here as per the problem maxflow += aug, mincost += aug * dis[t]; } return make_pair(mincost, maxflow); }
int main(){ scanf("%d %d",&n,&m); for (int i=1;i<=m;++i){ int x,y,w; scanf("%d %d %d",&x,&y,&w); AddEdge(x,y,w); AddEdge(y,x,w); } spfa(); //printf("%d\n",ans); if (f[n]){ print(n); printf("\n"); }else { printf("-1\n"); } return 0; }
int main() { freopen("test.in", "r", stdin); int n, m; char str[1001]; while(scanf("%d%d", &n, &m) != EOF) { if (!n && !m) { break; } cntmen = cnthouse = 0; memset(edge, 0, sizeof(edge)); memset(mempool, 0, sizeof(mempool)); memnum = 0; for (int i = 0; i < n; ++i) { scanf("%s", str); for (int j = 0; j < m; ++j) { if (str[j] == 'm') { men[++cntmen].x = i; men[cntmen].y = j; } else if (str[j] == 'H') { house[++cnthouse].x = i; house[cnthouse].y = j; } } } S = 0, T = cntmen + cnthouse + 1; for (int i = 1; i <= cntmen; ++i) { for (int j = 1; j <= cnthouse; ++j) { add(i, j + cntmen, mandis(men[i], house[j]), 1); } } for (int i = 1; i <= cntmen; ++i) { add(S, i, 0, 1); } for (int j = 1; j <= cnthouse; ++j) { add(j + cntmen, T, 0, 1); } cost = 0; while(spfa()) { aug(); } printf("%d\n",cost); } return 0; }
double MCMF() { double mincost=0; int maxflow=0; while (spfa()) { int nec=inf; for (int now=pre[T]; now!=-1; now=pre[e[now].u]) nec=std::min(nec,e[now].f); mincost+=nec*dis[T]; maxflow+=nec; for (int now=pre[T]; now!=-1; now=pre[e[now].u]) { e[now].f-=nec; e[now^1].f+=nec; } } return mincost; }
int mincost() { int cost=0,maxflow=0; while (spfa()) { int nec=inf; for (int now=pre[T]; now!=-1; now=pre[e[now].u]) nec=std::min(nec,e[now].cap); for (int now=pre[T]; now!=-1; now=pre[e[now].u]) { e[now].cap-=nec; e[now^1].cap+=nec; } maxflow+=nec; cost+=nec*dis[T]; } if (maxflow==2) return cost; else return -1; }
void work() { if(n<=1) { printf("0\n"); return; } spfa(1); for(int i=2;i<=n;++i) { if(dis[i]>=oo) { printf("No Answer\n"); return; } ans+=dis[i]*w[i]; } printf("%I64d\n",ans); }
int main() { int i,f,ans; while(scanf("%d",&n)!=EOF) { chu(); for(i=1;i<=n;i++) { for(f=1;f<=n;f++) { scanf("%d",&map[i][f]); } } ans=spfa(); ans=min(ans,spfahuan()); printf("%d\n",ans); } return 0; }
int main(){ scanf("%d %d",&n,&m); for (int i=1;i<=m;++i){ int x,y,w; scanf("%d%d%d",&x,&y,&w); int t=(i<<1)-1; Data[t]=y; Wei[t]=w; Pre[t]=Connect[x]; Connect[x]=t; Data[++t]=x; Wei[t]=w; Pre[t]=Connect[y]; Connect[y]=t; } spfa(); printf("%d\n",(f[n]==2147483647)?-1:f[n]); return 0; }
int main(){ int k, p, i, m, v1, v2, cost; freopen("data.in", "r", stdin); scanf("%d", &k); while(k--){ ep = 0; memset(head, -1, sizeof(head)); memset(e, 0, sizeof(e)); scanf("%d%d%d%d", &n, &m, &p, &q); for(i = 1; i <= n; i++) scanf("%d", &troop[i]); for(i = 1; i <= p; i++){ scanf("%d%d%d", &v1, &v2, &cost); addedge(v1, v2, cost); addedge(v2, v1, cost); } spfa(); } return 0; }
int main(){ #ifdef QWERTIER freopen("in.txt","r",stdin); #endif int T, m, kase = 1; scanf("%d", &T); while(T--){ int u, v, w; scanf("%d%d", &n, &m); memset(le, 0 ,sizeof(le)); ecnt = 0; while(m--){ scanf("%d%d%d", &u, &v, &w); addEdge(u - 1, v - 1, w); addEdge(v - 1, u - 1, w); } printf("Scenario #%d:\n%d\n\n", kase++, spfa(0)); } return 0; }
int mincost_maxflow(int s,int t) { this->beg=s;this->end=t; flow=0,cost=0; while(spfa()) { int Min=INT_MAX; for(int i=end;i!=beg;i=pre[i]) if(Min>E[path[i]].flow) Min=E[path[i]].flow; for(int i=end;i!=beg;i=pre[i]) { E[path[i]].flow-=Min; E[path[i]^1].flow+=Min; } flow+=Min; cost+=dis[end]; } return cost; }
int min_cost_max_flow(int src, int dst, int n){ int maxflow = 0, mincost = 0; for(;;){ if( !spfa(src, dst, n)){ return mincost ; } int aug = oo; for(int i = from[dst]; i != -1; i = from[name[i^1]] ){ checkMin( aug, flow[i] ); } if( !aug ) return mincost; maxflow += aug; mincost += sp[dst] * aug; for(int i = from[dst]; i != -1; i = from[name[i^1]] ){ flow[i] -= aug; flow[i^1] += aug; } } return mincost; }
int main (void) { int n,st,ed; while(cin >> n >> st >> ed){ init(n+1); for (int i=0;i<n;i++){ int x,y,nn; bool first = true; x = i+1; cin >> nn; while(nn--){ cin >> y; if (first) first = false,add_edge(x,y,0); else add_edge(x,y,1); } } spfa(st); if (dist[ed]==INF) cout << -1 << endl; else cout << dist[ed] << endl; } }
int main() { scanf("%d", &interval_number); max_point = edge_number = 0; memset(vis, 0, sizeof(vis)); memset(head, -1, sizeof(head)); for (int i = 1; i <= interval_number; i++) { int start, end, value; scanf("%d%d%d", &start, &end, &value); end++; addEdge(start, end, value); max_point = max(max_point, end); } for (int i = 0; i < max_point; i++) { addEdge(i, i + 1, 0); addEdge(i + 1, i, -1); } spfa(); printf("%d\n", distance[max_point]); return 0; }