随笔分类 - 网络流
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3572题意: 给出N个任务,M个机器,每天每台机器只能处理一件事,接下来N行,每行有p s e分别表示这个任务要用p天,要在s~e天完成,问你这所有任务能不能完成。坑爹: 模板题,注意一下vector数组clear的时候控制好长度,有可能会超时。解法: 将N个任务标号为1~N,用个max_Day来找最大的天数,然后天数的标号为N+1~max_Day+N, 建立一个源点0,汇点max_Day+N+1。建图的步骤:先将所有任务与源点相连,权值为完成所需天数,再将这个任务与再这个任务范围内的时间(天)相连,权...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3549题意: 给出N个点M条边,求1到N的最大流量。坑爹: 模板解法: 在白书上看到的ISAP算法就敲了个模板出来A了这道题,就是想测试一下EK和ISAP的时间差多少,EK是921MS,ISAP是109MS。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int maxn = 1000 + 10; 8 const int INF = 0x3fffffff; 9 10 stru...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1569题意: 给出M*N的格子,每个格子里都有数字,问你怎么样取数字能使其和最大,前提是取出来的格子不能两两相邻。坑爹: 如果按照方格取数的方法教上去会超时。解法:struct Edge //记录边{ int from; //边的起点 int to; //边的终点 int cap; //边的容量 int next; //优化DFS和BFS的搜索,因为边有很多个,每次从0开始找的话会超时,所以用个cur数组来初始化。}; 用dinic算法,里面有两个部分比较重要,一个是BFS,另一个是DF...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1565题意: 给出N*N的格子,每个格子里都有数字,问你怎么样取数字能使其和最大,前提是取出来的格子不能两两相邻。坑爹: 一开始以为不是选奇数位置就是偶数位置就能解出来的水题,仔细看了下题意发现天真了。。。解法: 这道题可以用网络流的最小割来做 最大流 = 最小割 = 最小点权覆盖集 = sum - 最大点权独立集先设置一个源点(0)和一个汇点( n*n+1),一开始初始化的时候把源点到所有 (i+j)%2 ==1的格子全部给个值,然后初始化把汇点到所有 (i+j) %2 == 0的格子也给个值,值就...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1532题意: 从1开始到终点n,最多能通过多少的流量,就比如说1到2的流量是20,2到3的流量是10,那么到达终点3的流量为10,而1到2还能经过10的流量,2到3不能再通过。坑爹: 每次找到一条增广轨的时候要补一个反向的边,不然你走这一条路就认为你一定走了,因为有可能这条路不是最佳的路径。解法: 利用BFS搜索点,找到终点就返回1,没有则返回0,再设置一个maxflow函数,只要BFS的返回值为1,就将这条增广轨上的最大可以通过的流量(min)算出来(利用change_map函数),然后 max_fl...
阅读全文
浙公网安备 33010602011771号