摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3987思路:我们知道最小割是不唯一的,这里要我们求割边最少的最小割,比较好做法有:第一种:建边的时候每条边权 w = w * (E + 1) + 1;这样得到最大流 maxflow / (E + 1),最少割边数 maxflow % (E + 1) 道理很简单,如果原先两类割边都是最小割,那么求出的最大流相等但边权变换后只有边数小的才是最小割了乘(E+1)是为了保证边数叠加后依然是余数,不至于影响求最小割的结果第二种:建图,得到最大流后,图中边若满流,说明该边是最小割上的边 再建图,原则:满流的边改 阅读全文
posted @ 2013-05-09 14:57
ihge2k
阅读(748)
评论(0)
推荐(0)
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2149首先介绍一下巴什博奕(BashGame):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。分析:显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获 阅读全文
posted @ 2013-05-09 14:21
ihge2k
阅读(394)
评论(0)
推荐(0)
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3452思路:一颗带边权的树,最小割求树根和叶子结点不连通。可设汇点为n+1,注意只用叶子结点才能和汇点连容量为inf的边。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<set> 6 using namespace std; 7 #define MAXN 2222 8 #define MAXM 阅读全文
posted @ 2013-05-09 13:58
ihge2k
阅读(226)
评论(0)
推荐(0)
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1579所谓记忆化,简单理解就是dfs+dp,水题不多说了。。。View Code 1 #include 2 #include 3 #include 4 using namespace std; 5 #define MAXN 55 6 int dp[MAXN][MAXN][MAXN]; 7 8 //记忆话搜索 9 int dfs(int a,int b,int c){10 if(a20||b>20||c>20)return dfs(20,20,20);12 if(dp[a][b][... 阅读全文
posted @ 2013-05-09 12:57
ihge2k
阅读(283)
评论(0)
推荐(0)

浙公网安备 33010602011771号