/** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge.net/problem/HDU-1569 题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和. 思路:建图过程:对于二维矩阵,如果(i+j)%2==0,那么放在X集,s->(i-1)*m+j, cap = 元素值.否则放在Y集, (i-1)*m+j->t, cap = 元素值. 如果u与…
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 68 Accepted Submission(s): 33   Problem Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大.  …
传送门:hdu1565 方格取数(1) 传送门:hdu1569 方格取数(2) 定理:1. 最小点权覆盖集=最小割=最大流2. 最大点权独立集=总权-最小点权覆盖集 步骤: 1. 先染色,取一个点染白色,和它相邻的点染黑色2. 每个白点向它相邻的黑点连一条边,容量为 inf (无穷大)3. 增加源点S,向每一个白色点连一条边,容量为白点的权4. 增加汇点T,每个黑点向T连一条边,容量为黑点的权 #pragma comment(linker,"/STACK:1024000000,102400000…
#6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 在一个有 m×n m \times nm×n 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意 2 22 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. 输入格式 文件第 1 11 行有 2 22 个正整数 m mm 和 n nn,分别表示棋盘的行数和…
题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和.思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点集I覆盖所有边,点权之和最小),(对应于原题,就是求拿掉最小点集,这些点覆盖所有边,拿掉后,每个点必然两两不相邻,否则:假设u,v相邻,则u->v这条边未被覆盖,矛盾),在建立超级源汇点s,t,s连向所有X中的点(设二分图G(X,Y)),Y联向t,,权值为点权,原来X->Y的所有边权值改为inf,…
首先要明白图论的几个定义: 点覆盖.最小点覆盖: 点覆盖集即一个点集,使得所有边至少有一个端点在集合里.或者说是“点” 覆盖了所有“边”.. 最小点覆盖(minimum vertex covering): 点最少的点覆盖. 点覆盖数(vertex covering number): 最小点覆盖的点数. 独立集: 独立集即一个点集,集合中任两个结点不相邻,则称V为独立集.或者说是导出的子图是零图(没有边)的点集. 最大独立集(maximum independent set): 点最多的独立集. 独…
题目大意: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大. 初看: 没想法中..Orz, 万物皆网络流?? 如何构图??如何构图?? 以什么为容量? 格子里的数吗? 点呢? 超级源是什么??超级汇是什么?? 这特么是网络流?? 呜..好想看题解..好难.. 再想会.. 拆点? 或者网络流只是辅助 主算法其实是搜索? 想到7点就看题解了.. 最后的脑洞乱开 超级源向所有点连…
嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1569 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是…
http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大. 思路: 最大点权独立集=点权之和-最小点权覆盖集=最小割=最大流 先来看最小点权覆盖集,也就是选取点覆盖所有的边,并且权值要最小. 解决方法是: 从源点向X集连边,容量为点的权值,Y集向汇点连边,容量也为点的权值.如果u和v…
最小点权覆盖集 二分图最小点权覆盖集解决的是这样一个问题: 在二分图中,对于每条边,两个端点至少选一个,求所选取的点最小权值和. 方法: 1.先对图二分染色,对于每条边两端点的颜色不同 2.然后建立源点S,向其中一种颜色的点连一条容量为该点权值的边 3.建立汇点T,由另一种颜色的点向T连一条容量为该点权值的边 4.对于二分图中原有的边,改为由与S相连的点连向与T相连的点的一条容量为INF的边 跑一遍最大流,其结果就是最小点权和. 原理: 实际为最小割.建好图后,对整张图求最小割,那么不可能割IN…