摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=29821思路:首先拆点,每个字符对应的位置拆成i和i+len,然后源点和i连边,容量为1,花费为0,i+len与汇点连边,容量为1,花费为0,然后就是对于那些在P中的字符串连边,容量为1,花费为g[u][v],最后跑最小费最大流即可,然后答案就是len-flow,cost; 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #include 4 #inc 阅读全文
posted @ 2013-09-12 23:16 ihge2k 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685思路:想了好久,终于想明白了,懒得写了,直接copy大牛的思路了,写的非常好!做法是先求一次最大匹配设为cnt,那么左边有n-cnt个王子还未匹配,右边有m-cnt个公主还未匹配,因此我们将左侧增加m-cnt个虚拟王子,虚拟王子与右边所有公主连边;右边增加n-cnt个虚拟公主,虚拟公主与左边所有王子连边,这样我们就得到一个两边各有M=n+m-cnt的二分图,且该二分图是一个完美匹配。也就是每个王子都有一个匹配的公主。现在,我们将每个王子匹配的公主向该王子喜欢的公主连边(建一个新图g),然后求g 阅读全文
posted @ 2013-09-12 21:32 ihge2k 阅读(1247) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4496、思路:简单并查集应用,从后往前算就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 10100 7 #define MAXM 1001000 8 9 struct Edge{10 int u,v;11 }edge[MAXM];12 13 int n,m,ans[MAXM];14 int parent[MAXN];15 int Find(int x)16 {17... 阅读全文
posted @ 2013-09-12 14:42 ihge2k 阅读(382) 评论(0) 推荐(0) 编辑