Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

各位大牛请留意一下,本人用的是以前的模板,为什么我得到是最大流的2倍啊,求解释

Posted by wzh22014 at 2011-05-27 16:59:35 on Problem 1459
#include<iostream>
#include<memory.h>
#include<queue>
#include<cstdio>
#include <cmath>
using namespace std;

const int MAX = 110;
const int INF = 0x7fffffff;

int n, np, nc, m;
int cap[MAX][MAX], flow[MAX][MAX], aug[MAX], front[MAX];
queue <int > Q;

void max_flow(int s, int e) {
    int t, i, ans=0;
	while(1) {
		memset(aug, 0, sizeof(aug));
		memset(front, -1, sizeof(front));
		aug[s]=INF;
		Q.push (s);
		while(!Q.empty ()) {
			t=Q.front ();
			Q.pop ();
			for(i=s;i<=e;i++) {
				if(front[i]==-1&&cap[t][i]>flow[t][i]) {
					front[i]=t;
					Q.push (i);
					aug[i]=aug[t]<cap[t][i]-flow[t][i]?aug[t]:cap[t][i]-flow[t][i];
				}
			}
		}
		if(!aug[e])
			break;
		ans+=aug[e];
		for(i=e;i!=s;i=front[i]) {
			flow[front[i]][i]+=aug[e];
			flow[i][front[i]]-=aug[e];
		}
		ans+=aug[e];
	}
	printf("%d\n", ans/2);
}

int main() {
    int i, a, b, c;
	char temp[30];
    while (scanf("%d %d %d %d", &n, &np, &nc, &m) != EOF) {
		int s=0, e=n+1;
		memset(cap, 0, sizeof (cap));
		memset(flow, 0, sizeof (flow));
		for(i=0;i<m;i++) {
			scanf("%s", temp);
			sscanf(temp, "(%d,%d)%d", &a, &b, &c);
			a++, b++;
			cap[a][b]+=c;
		}
		for(i=0;i<np;i++) {
			scanf("%s", temp);
			sscanf(temp, "(%d)%d", &a, &b);
			a++;
			cap[s][a]+=b;
		}
		for(i=0;i<nc;i++) {
			scanf("%s", temp);
			sscanf(temp, "(%d)%d", &a, &b);
			a++;
			cap[a][e]+=b;
		}
		max_flow(s, e);
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator