HDU
来源:互联网 发布:数据电视怎么调画面 编辑:程序博客网 时间:2024/06/05 10:12
#include <cstdio>#include <vector>#include <string.h>#include <queue>#include <algorithm>#define MAX 500#define INF 0x3fffffffusing namespace std;int c[MAX][MAX];int flow[MAX];int pre[MAX];int n, m;void init( int n ) { memset( c, 0, sizeof( c ) ); memset( flow, 0, sizeof( flow ) );}int BFS( int s, int t ) { queue<int> q; for( int i = 1; i < m + 1; i++ ) { pre[i] = -1; } pre[s] = 0; flow[s] = INF; q.push( s ); while(!q.empty() ) { int cur = q.front(); q.pop(); if( cur == t ) //找到了增广路径 break; for( int i = 1; i < m + 1; i++ ) { if( i != s && c[cur][i] > 0 && pre[i] == -1 ) { pre[i] = cur; //记录前驱 flow[i] = min( c[cur][i], flow[cur] ); //关键:迭代的找到增量 q.push( i ); } } } if( pre[t] == -1 ) //残留图中不再存在增广路径 return -1; else return flow[t];}int maxFlow( int s, int t ) { int increasement = 0; int sumflow = 0; while( ( increasement = BFS( s, t ) ) != -1 ) { int k = t; //利用前驱寻找路径 while( k != s ) { int last = pre[k]; c[last][k] -= increasement; //改变正向边的容量 c[k][last] += increasement; //改变反向边的容量 k = last; } sumflow += increasement; } return sumflow;}int main() { int T; scanf( "%d", &T ); for( int k = 1; k <= T; k++ ) { scanf( "%d%d", &n, &m ); swap( n, m ); init( n ); for( int i = 0; i < n; i++ ) { int a, b, v; scanf( "%d%d%d", &a, &b, &v ); if( a == b ) continue; c[a][b] += v; } printf( "Case %d: %d\n", k, maxFlow( 1, m ) ); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- HashMap要点记
- java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false is
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
- JUnit自动化单元测试(五):参数化测试
- 菜鸟重新了解C#
- HDU
- [Linux]history命令用法详解
- MyBatis中ResultMap和ResultType的区别
- jq 层级选择器
- 排序算法
- Hadoop基础教程-第5章 YARN:资源调度平台(5.2 YARN参数解读与调优)
- maven-assembly-plugin 打包可执行jar(fat jar)和配置文件与jar同时打包部署
- VS2010中Qt翻译文件的创建与使用范例
- CentOS6.8装tensorflow1.0