#include #include #include #include #include #include using namespace std; #define NLIMIT 100000 #define TLIMIT 100 #define MLIMIT 100 #define VLIMIT 1000 #define N NLIMIT+100 #define M MLIMIT+100 //Mincost code start #define MCN MLIMIT*5 #define MCM MCN*MCN #define rep(i,a) for(int i=0; i (d[ver[j]]+cost[j]-d[i]))) add = d[ver[j]] + cost[j] - d[i]; if(add == 0x7fffffff) return false; rep(i,T+1) if(v[i]) { v[i] = false; d[i] += add; last[i] = tlast[i]; } return true; } int dfs(int cur, int flow) { if(cur == T) return flow; v[cur] = 1; int t; for(int &i=last[cur]; i; i = next[i]) if(c[i] && v[ver[i]]==0 && d[cur] == d[ver[i]]+cost[i] && (t = dfs(ver[i], (flow < c[i]?flow:c[i])))) { c[i] -= t; c[opp(i)] += t; v[cur] = 0; return t; } return 0; } int flow, flfl=0; int MCMF(int _S, int _T) { S = _S; T = _T; int ans = 0; rep(i,T+1) d[i] = 0, tlast[i] = last[i], v[i] = 0; do { int t; while(t=dfs(S,0x7fffffff)) { ans += t*d[S]; flow += t; } } while(relable()); return ans; } //Mincost code end int val[N], siz[N], least; int val2[M]; vector adj[N]; bool vv[N] = {0}; void dfs1(int cur, int prev) { vv[cur ] = true; siz[cur] = 0; for(int i=0; i > ordered(n); for(int i=0; i= m) { break; } } } for(int i=0; i