boolbfs(){ memset(vis,0,sizeof(vis)); queue<int> q; q.push(s); d[s] = 0; vis[s] = 1; while (!q.empty()){ int u = q.front();q.pop(); for (int i = 0; i < g[u].size(); i ++){ Edge& e = edg[g[u][i]]; if (!vis[e.to] && e.cap > e.flow){ // 只考虑残量网络中的弧 vis[e.to] = 1; d[e.to] = d[u] + 1; q.push(e.to); } } } return vis[t]; }
intdfs(int u,int a){ if (u == t || a == 0) return a; int flow = 0, f; for (int& i = cur[u]; i < g[u].size(); i ++){//从上次考虑的弧 Edge& e = edg[g[u][i]]; if (d[u] + 1 == d[e.to] && (f = dfs(e.to, min(a,e.cap - e.flow))) > 0){ e.flow += f; edg[g[u][i]^1].flow -= f; flow += f; a -= f; if (a == 0) break; } } return flow; }
#define maxp 500 ll maps[maxp][maxp]; int n,m; int c[maxp],w[maxp]; voidfloyd(){ for (int k = 1; k <= n; k ++){ for (int i = 1; i <= n; i ++){ for (int j = 1; j <= n; j ++){ if (maps[i][k] != INF && maps[k][j] != INF){ maps[i][j] = min(maps[i][j], maps[i][k] + maps[k][j]); } } } } }
int sum; boolok(ll mid){ G.init(2 * n + 10); int st = 2 * n + 1,ed = 2 * n + 2; for (int i = 1; i <= n; i ++){ G.addEdge(st, i, c[i]); } for (int i = 1; i <= n; i ++){ G.addEdge(i + n, ed, w[i]); } for (int i = 1; i <= n; i ++){ for (int j = 1; j <= n; j ++){ if (maps[i][j] <= mid){ G.addEdge(i, j + n, inf); } } } return sum == G.maxFlow(st,ed); //cout << "ret = " << ret << endl; }
intmain(){ //cout << INF << endl; while (~scanf("%d%d", &n, &m)){ sum = 0; for (int i = 1; i <= n; i ++){ scanf("%d%d", &c[i], &w[i]); sum += c[i]; } for (int i = 1; i <= n; i ++){ for (int j = 1; j <= n; j ++){ maps[i][j] = INF; } } //fill(maps, maps + (n + 2) * (n + 2), INF); for (int i = 1; i <= n; i ++) maps[i][i] = 0; int u,v,len; ll le = 0,ri = 0; for (int i = 1; i <= m; i ++){ scanf("%d%d%d", &u, &v, &len); ri += len; if (maps[u][v] > len) maps[u][v] = maps[v][u] = len; } floyd(); /*for (int i = 1; i <= n; i ++){ for (int j = 1; j <= n; j ++){ cout << maps[i][j] << ' '; }cout << endl; }*/ //cout << ri << endl; ll ans = -1; //ri += 1; while (le <= ri){ ll mid = MID(le,ri); //cout << le << ' ' << mid << ' ' << ri << endl; if (ok(mid)){ ri = mid - 1; ans = mid; }else { le = mid + 1; } } printf("%lldn", ans); } return0; }
voidFloyd(){ for (int k = 1; k <= n; k ++) for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++){ map[i][j] = map[i][j] | (map[i][k] & map[k][j]); } }
voidFloyd(){ for (int k = 1; k <= n; k ++) for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++){ map[i][j] = map[i][j] | (map[i][k] & map[k][j]); } }
intmain(){ int u,v; char s[100]; while (cin >> n){ if (n == 0) break; memset(map,0,sizeof(map)); while (scanf("%d%d", &u, &v)){ if (u == 0 && v == 0) break; scanf("%s", s); //cout << s << endl; for (int i = 0; i < strlen(s); i ++){ map[u][v] |= (1<<(s[i] - 'a')); } } Floyd(); while (scanf("%d%d", &u, &v)){ if (u == 0 && v == 0) break; if (map[u][v]){ for (int i = 0; i <= 26; i ++){ if (map[u][v] & (1 << i)){ printf("%c", 'a' + i); } } puts(""); }else { puts("-"); } } puts(""); } return0; }
intfind(int x){ if (pa[x] == x) return x; int ret = find(pa[x]); d[x] ^= d[pa[x]]; pa[x] = ret; return ret; }
boolUnion(int L,int R,int c){ int l = find(L); int r = find(R); if (l == r){ return ((d[L] ^ d[R]) == c); }else { if (l > r){ pa[l] = r; d[l] = d[L] ^ c ^ d[R]; }else { pa[r] = l; d[r] = d[R] ^ c ^ d[L]; } } return1; }
intbin(int l,int r,int va){ int mid = MID(l,r); while (l <= r){ mid = MID(l,r); if (x[mid] == va) return mid; elseif (x[mid] < va) l = mid + 1; else r = mid - 1; } return-1; }
intmain(){ char s[15];int n,m; scanf("%d%d", &n, &m); int cnt = 0; for (int i = 0; i < m; i ++){ scanf("%d%d%s", &l[i], &r[i], s); x[cnt ++] = l[i] - 1; x[cnt ++] = r[i]; if (s[0] == 'o') c[i] = 1; else c[i] = 0; } sort(x, x + cnt); cnt = unique(x, x + cnt) - x; for (int i = 0; i <= maxn; i ++){ pa[i] = i; d[i] = 0; } for (int i = 0; i < m; i ++){ int L = bin(0, cnt - 1, l[i] - 1) + 1; int R = bin(0, cnt - 1, r[i]) + 1;
inlineintf(int a,int b,int c){ double p = (a +b+c)/2.0; return (int)(100.0*sqrt(p*(p-a)*(p-b)*(p-c))); }
inlineboolcheck(int a,int b,int c){ if (a + b > c && a + c > b && b + c > a) returntrue; elsereturnfalse; } int ans = 0; int n,num[45],to[45]; voiddfs(int id,int a,int b,int c){ if (id == n) { if (check(a,b,c)) { ans = max(ans,f(a,b,c)); } return; } if (a + to[n - 1] - to[id] + b + num[id] < c) return; if (a + to[n - 1] - to[id] + c + num[id] < b) return; if (c + to[n - 1] - to[id] + b + num[id] < a) return; if (a > to[n - 1] / 2) return; if (b > to[n - 1] / 2) return; if (c > to[n - 1] / 2) return; dfs(id + 1,num[id] + a, b, c); dfs(id + 1,a, num[id] + b, c); dfs(id + 1,a, b, num[id] + c); }
int dp[2][1655][1655]; intmain() { while (~scanf("%d",&n) && n){ ans = -1; for (int i = 1; i <= n; i ++){ scanf("%d", &num[i]); if (i == 0) to[0] = num[0]; else to[i] = to[i - 1] + num[i]; } sort(num,num + n); //dfs(0,0,0,0);
memset(dp,-1,sizeof(dp)); dp[0][0][0] = 0; for (int i = 1; i <= n; i ++){ for (int j = 0; j <= to[i]; j ++){ for (int k = 0; k <= to[i]; k ++){ if (j - num[i] >= 0){ if (dp[(i + 1) % 2][j - num[i]][k] != -1){ if (check(j,k,to[i] - j - k)) dp[i % 2][j][k] = max(dp[i % 2][j][k],f(j,k,to[i]-j-k)); else dp[i % 2][j][k] = max(0,dp[i % 2][j][k]); } } if (k - num[i] >= 0){ if (dp[(i + 1) % 2][j][k - num[i]] != -1){ if (check(j,k,to[i] - j - k)) dp[i % 2][j][k] = max(dp[i % 2][j][k],f(j,k,to[i]-j-k)); else dp[i % 2][j][k] = max(0,dp[i % 2][j][k]); } } if (to[i] - j - k - num[i] >= 0){ if (dp[(i + 1) % 2][j][k] != -1){ if (check(j,k,to[i] - j - k)) dp[i % 2][j][k] = max(dp[i % 2][j][k],f(j,k,to[i]-j-k)); else dp[i % 2][j][k] = max(0,dp[i % 2][j][k]); } } } } } for (int i = 0; i <= to[n]; i ++) for (int j = 0; j <= to[n]; j ++){ ans = max(dp[n % 2][i][j],ans); } printf("%dn", ans == 0? -1:ans ); } return0; }
intmain(int argc, charconst *argv[]) { int x,y,n,m; while (~scanf("%d%d", &n, &m)){ for (int i = 0; i < n; i ++){ scanf("%d%d%d%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2 ,&p[i].r,&p[i].g,&p[i].b); }
while(m--){ scanf("%d%d", &x, &y); int r = 255,g = 255,b = 255 ; for (int i = n - 1; i >= 0; i --){ if (p[i].x1 <= x && x <= p[i].x2 && p[i].y1 <= y && y <= p[i].y2){ r = p[i].r; g = p[i].g; b = p[i].b; break; } } printf("%d %d %dn", r, g ,b); }