随笔分类 -  网络流

HDU 2444
摘要:主要是dfs染色判断奇圈+二分匹配#include<cstdio> #include<string.h> using namespace std; int map[210][210],col[210]; int n,m; int cx[210],cy[210]; bool mk[210]; bool dfs(int now){ int i; for(i=1;i<=n;i++) if(map[now][i]){ if(col[i]==-1){ col[i]=!col[now]; bool tem=dfs(i); if(tem==0) return ... 阅读全文

posted @ 2012-05-12 12:20 c语言源码 阅读(178) 评论(0) 推荐(0)

HDU 4106 Fruit Ninja
摘要:这个考费用流建图(时间跑到HDU目前的第四)是poj3680的加强版poj 3680 是区间对点的限制,而这道题,是点对区间的限制。如果选取取一个数,那么每个包含这个数且长度为 M的连续区间内可以选的数都要减少一个,对吧?转换模型!点变区间,区间变点!把区间离散化为 n - m + 1个部分,那么就有 n - m + 2 个点,left = max(1,i-m+1) ;right = min(i,tot-1)+1;分别是每个点对区间限制的左边界和右边界。#include<cstdio> #include<stdlib.h> #include<cstring> 阅读全文

posted @ 2012-03-23 00:23 c语言源码 阅读(231) 评论(0) 推荐(0)

POJ 3680
摘要:建图很巧妙先离散化区间端点。从0->1,1->2,~~~~~n->n+1每条边容量为k,费用为0,对于每条线段,他的两个端点连边容量为1,费用-w然后跑一遍最小费用流算法正确性证明:如果两个区间没有交集,那么代表它们的边可以出现在同一增广路上,这一点显然。否则,它们就在不同的增广路上。每一个区间对应的边的容量都是1,这样,最后的流量就是被选出的两两有交集的区间的数量。受到(0,1,k,0)这条边的容量限制,这个值刚好不大于k.区间的权都是正的,因此选取的区间多多益善,所以流量必然最大。(对于每次选取的增广路中总存在一个区间,在每次增广所得区间都与这个区间有交集)#includ 阅读全文

posted @ 2012-03-21 18:11 c语言源码 阅读(182) 评论(0) 推荐(0)

KM算法理解
摘要:转自http://www.byvoid.com/blog/match-km/[二分图带权匹配与最佳匹配]什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。二分图的带权匹配与最佳匹配不等价,也不互相包含。我们可以使用KM算法实现求二分图的最佳匹配。方法我不再赘述,可以参考tianyi的讲解。KM算法可以实现为O(N^3)。[KM算法的几种转化]KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再 阅读全文

posted @ 2012-03-19 21:13 c语言源码 阅读(937) 评论(0) 推荐(0)

导航