Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
没抄模板1A:) 贴代码还算短不到2k#include <cstdio> #include <cstring> #define MN 105 #define MP 10 #define INF 99999999 int p, n, st[MN][MP], nn, mat[MN][MN], flow[MN][MN]; int maxflow() { int q[MN], p[MN], m[MN], h, t, c, i, f; while(1) { c = h = t = 0, q[t++] = 0, m[0] = INF; memset(p, 0, sizeof(p)); while(h < t) { if((c = q[h++]) == 1) break; for(i = 0; i < nn; i++) { if(!p[i] && (f = mat[c][i]-flow[c][i])) p[i] = c + 1, q[t++] = i, m[i] = (f<m[c])?f:m[c]; else if(!p[i] && (f = flow[i][c])) p[i] = -c - 1, q[t++] = i, m[i] = (f<m[c])?f:m[c]; } } if(c != 1) break; while(c) { if(p[c] > 0) flow[p[c]-1][c] += m[1], c = p[c]-1; else flow[c][-p[c]-1] -= m[1], c = -p[c]-1; } } for(f = i = 0; i < nn; i++) f += flow[0][i]; return f; } int compstate(int fr, int to) { int i; for(i = 0; i < p; i++) if(st[to][i] != 2 && st[fr][i] != st[to][i]) break; return (i == p); } int main() { int i, j, k, u, v, q; freopen("input.txt", "r", stdin); scanf("%d%d", &p, &n); memset(mat, 0, sizeof(mat)); for(nn = 2, k = 0; k < 2; k++) for(j = 0; j < p; j++) st[k][j] = k; for(i = 1; i <= n; i++) { scanf("%d", &q); for(k = 0; k < 2; k++, nn++) for(j = 0; j < p; j++) scanf("%d", &st[nn][j]); u = nn-2, v = nn-1, mat[u][v] = q; if(compstate(0, u)) mat[0][u] = INF; if(compstate(v, 1)) mat[v][1] = INF; } for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) if(i != j && compstate(2*i+1, 2*j)) mat[2*i+1][2*j] = INF; memset(flow, 0, sizeof(flow)); printf("%d ", maxflow()); for(k = 0, i = 3; i < nn; i += 2) for(j = 2; j < nn; j += 2) if(flow[i][j]) k++; printf("%d\n", k); for(i = 3; i < nn; i += 2) for(j = 2; j < nn; j += 2) if(flow[i][j]) printf("%d %d %d\n", i/2, j/2, flow[i][j]); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator