3
26
2010
0

简单最大流模板 SGU176

 

#include <cmath>
using namespace std;
#include <numeric>
#include <functional>
#include <iostream>
#include <algorithm>
#include <bitset>
#include <string>
#include <cstring>
#include <cstdio>
#include <queue>
#include <set>

//By chyx111
typedef pair<int,int> pii;
#define Rep(i,n) for(int n_ = (n), i = 0; i< n_; ++i)

const int MAXN = 128;
int G[ MAXN ][ MAXN ], flow[ MAXN ], pnt[ MAXN ];
int add[ MAXN ][ MAXN ];

// E是具体题目的数据,与模板无关
int E[ MAXN*MAXN ][ 3 ];

bitset< MAXN > mk;
int oo = 0x0f0f0f0f;
int n, m;

int augment(){
	mk.reset();
	memset(flow,0,(sizeof flow));
	flow[0] = oo;
	priority_queue<pii> Q;
	Q.push( pii(oo,0) );
	mk.reset();
	while( !Q.empty() ){
		int cur = Q.top().second; Q.pop();
		mk[cur] = true;
		if( cur == n+1){
			for(int i = cur; i != 0; i = pnt[i] ){
				G[pnt[i]][i] -= flow[n+1];
				G[i][pnt[i]] += flow[n+1];
	
				add[pnt[i]][i] += flow[n+1];
				add[i][pnt[i]] -= flow[n+1];
			}
			return flow[n+1];
		}
		for(int i = 1; i <= n+1; ++i)if( !mk[i] && G[cur][i] && flow[i] < G[cur][i] && flow[i] < flow[cur] ){
			flow[i] = min( flow[cur], G[cur][i] );
			pnt[i] = cur;
			Q.push( pii(flow[i], i ) );
		}
	}
	return 0;
}

int maxflow(){
	int add;
	int ans = 0;
	while( add = augment() ){
//		cout << "augment: " << add << endl;
		ans += add;
	}
	return ans;
}

int main() {
	while(cin >> n >> m){
		memset(G,0,(sizeof G));
		memset(add,0,(sizeof add));
		G[0][1] = oo;
		G[n][n+1] = oo;
		Rep(i,m){
			int a, b, c, d;
			scanf("%d%d%d%d", &a, &b, &c, &d);
			E[i][0] = a; E[i][1] = b; E[i][2] = c;
			if(d){
				G[0][b] += c;
				G[a][n+1] += c;
			}else{
				G[a][b] = G[b][a] = c;
				E[i][2] = 0;
			}
		}
		bool ok = true;
		int flow = maxflow(); 
		if( count( G[0]+2, G[0]+n+1, 0 ) != n-1) ok = false;

		if( ok ){
			cout << add[0][1] << endl;
			Rep(i,m){
				if(i) putchar(' ');
				printf("%d", E[i][2] + max(add[E[i][0]][E[i][1]],add[E[i][1]][E[i][0]]));
			}
			puts("");
		}else{
			puts("Impossible");
		}
	}
	return 0;
}

 

 

Category: 未分类 | Tags: | Read Count: 1922

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com