问题来源:hdu-1532
问题描述:约翰是个农民,每次下雨的时候他的庄家总是会被淹没,这就意味着当庄家被水淹后需要很长时间才能重新生长出来,因此,约翰已经建立了一系列排水管道为了使他的庄家尽可能被淹没的最少,也就是说管道的排水量必须很大.作为一名工程师,约翰可以计算出管道网能排水的最大能力.Input:输入包含多组用例,每组用例第一行是两个数N,M,N表示一共有N个管道,M表示一共有M个点,接下来N行每行输入三个数字a,b,c表示,a管道口到b管道口最大排水能力为c.
Output:对每一组用例,输出排水量的最大值Sample Input:
5 41 2 40
1 4 20
2 4 20
2 3 30
3 4 10
Sample Output:
50#include<stdio.h>
#include<string.h>
#define MAX 202
#define INF 999999999
bool bfs( int M );
void up_date( int k );
int Min( int a , int b ){ return a < b ? a : b ; }
int min;
int rest[MAX][MAX] , pre[MAX];
//rest[i][j]表示i点到j点是否可灌水(非零就表示可灌)
//pre[k]表示BFS寻找增广路径时k的前驱
int main( ){
int N , M , sum;
int i , j , a , b , c ;
while( ~scanf("%d%d",&N,&M) ){
memset( rest , 0 , sizeof( rest ) ); //开始前rest为0,即没有管道,不可灌水
for( sum=0 , i=1 ; i<=N ; i+