摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4322思路:建图真的是太巧妙了!直接copy大牛的了:由于只要得到糖就肯定有1个快乐度,在这一点上糖的效果是等效的。所以只要考虑有特殊效果的糖的分配就可以了。当快乐的程度超过b[i]时,多出来的部分就浪费了,为了使浪费尽可能少,我们用费用流加以控制,当获得最大费用最大流的时候,这是的费用的利用率就是最高的。在建图时只需考虑特殊的糖就可以了,建图方法:原点到每个糖:流为1,费用为0。如果糖对某个人有特殊效果,连边:流为1,费用为0。人向汇点连边:最终快乐的程度不超过b[i]的情况:流为b[i]/k,限 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4411思路:这道题建图比较难想,首先是建立超级源点和超级汇点,那么由于有K个警察,于是vs与0连边,容量为k,费用为0,因为这K个警察不一定都出去,也就是不一定是最大流,于是0和vt连边,容量为k,费用为0。然后就是拆点建图了:(1):0到i连边,容量为1,费用0到i的最短路,表示去抓城市i的小偷。(2):从i到i+n,容量为1,费用为-1000000(很小的负权),这样可以保证每个城市都能遍历到。(3):对于城市i,j,(i 2 #include 3 #include 4 #include ... 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2485思路:题目的意思是删除最少的点使1,n的最短路大于k。将点转化为边,容量为1,费用为0,然后就是对于那些有道路的城市之间连边,若(u,v)有边,则连边(u+n)->v,容量为inf,费用为花费的时间1,然后就是跑最小费了,若dist[vt]>k,则返回false,最后输出的flow就代表要删除的点的个数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define M 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4289思路:求最小花费,最小割应用,将点权转化为边权,拆点,(i,i+n)之间连边,容量为在城市i的花费,然后就是若u,v之间有路,则连边(u+n,v),(v+n,u).最后就是跑最大流了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 44444444 9 #define inf 1que; 39 ... 阅读全文