| ||||||||||
| 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 | |||||||||
一直WA,請師兄指點迷津 代碼如下#include <cstdio>
#define fMIN(a,b) a>b?b:a
#define INF 100000000
int N,P,ans,s[10] = {0,0,0,0,0,0,0,0,0,0},n[10] = {1,1,1,1,1,1,1,1,1,1};
int pl[55][55],pt[55][55];
bool etl[55][55],ett[55][55];
bool vis[55];
struct {
int u[15],v[15],w,f;
}e[55],te[55];
struct {
int from,c,t,min;
}state[20000];
bool cmp(int u[],int v[]){
for (int i=0;i<P;++i)
if (u[i] + v[i] == 1)
return 0;
return 1;
}
bool bfs(){
for (int i=0;i<N+2;++i)
vis[i] = 0;
int front,rear;
front = rear = 0;
state[front].c = N;
state[front].min = INF;
while (front <= rear && state[front].c != N+1){
for (int i=0;i<=N+1;++i){
if (!vis[i] && ett[state[front].c][i] && (i >= N || te[i].f < te[i].w)){
state[++rear].c = i;
state[rear].min = fMIN(te[i].w - te[i].f,state[front].min);
state[rear].from = front;
state[rear].t = 1;
vis[i] = 1;
}
if (!vis[i] && etl[state[front].c][i] && (i >= N || e[i].f < e[i].w)){
state[++rear].c = i;
state[rear].from = front;
state[rear].min = fMIN(e[i].w - e[i].f,state[front].min);
state[rear].t = 0;
vis[i] = 1;
}
}
++front;
}
if (front > rear || state[front].c != N+1) return 0;
int tmp;
ans += tmp = state[front].min;
while (front != 0){
if (state[front].t){
te[state[front].c].f += tmp;
pl[state[front].c][state[state[front].from].c] -= tmp;
}
else {
pl[state[state[front].from].c][state[front].c] += tmp;
e[state[front].c].f += tmp;
te[state[front].c].w += tmp;
}
front = state[front].from;
}
return 1;
}
int main(){
while (scanf("%d%d",&P,&N) != EOF){
ans = 0;
e[N].f = e[N+1].f = te[N].f = te[N+1].f = 0;
te[N].w = te[N+1].w = e[N].w = e[N+1].w = INF;
for (int i=0;i<N+2;++i)
for (int j=0;j<N+2;++j)
etl[i][j] = ett[i][j] = pl[i][j] = pt[i][j] = 0;
for (int i=0;i<N;++i){
scanf("%d",&e[i].w);
e[i].f = 0;
for (int j=0;j<P;++j)
scanf("%d",&e[i].u[j]);
for (int j=0;j<P;++j)
scanf("%d",&e[i].v[j]);
for (int j=0;j<P;++j){
te[i].v[j] = e[i].u[j];
te[i].u[j] = e[i].v[j];
}
etl[i][i] = 0;
for (int k=0;k<i;++k){
if (cmp(e[i].v,e[k].u))
etl[i][k] = 1;
if (cmp(e[k].v,e[i].u))
etl[k][i] = 1;
}
if (cmp(s,e[i].u))
etl[N][i] = 1;
if (cmp(e[i].v,n))
etl[i][N+1] = 1;
}
while (bfs());
int cnt = 0;
for (int i=0;i<N;++i)
for (int j=0;j<N;++j)
if (pl[i][j]) ++cnt;
printf("%d %d\n",ans,cnt);
for (int i=0;i<N;++i)
for (int j=0;j<N;++j){
if (pl[i][j])
printf("%d %d %d\n",i+1,j+1,pl[i][j]);
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator