题意 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少. 思路 很明显的二分图最小点权覆盖集.WA在输出最小割方案上. [输出最小割方案]从源点S做一次DFS遍历,标记所有访问到的点,这些点就是S点集.然后对于每一条满流边,如果其两端点一个在S点集一个不在则该边就是此方案下的最小割边. 代码 [cpp] #include <iostream> #include <cstdio&g…
/** 转自: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与…
                                                      Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8158   Accepted: 2620   Special Judge Description Alice and Bob play the following game. First, Alice draws some d…
最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边. 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量为Y部点的权值,X和Y是原二分图中的边容量为INF. 这一题建二分图是这样的:把原图中的点拆成两个点分别作二分图的X部和Y部,一个入点u+一个出点u-,权值就是题目给的那两个:原图中每条有向弧<u,v>变成二分图的边(u-,v+). 然后就是建立容量网络,利用最小割求出这个二分图的最小点权覆盖集.…
题意:给一个图(有自回路,重边),要去掉所有边,规则:对某个点,可以有2种操作:去掉进入该点 的所有边,也可以去掉出该点所有边,(第一种代价为w+,第二种代价为w-).求最小代价去除所有边. 己思:点的权被分为出入?必然拆点啊!每个点一分为二,点权:出的为出点权,入的为入点权,原来边仍在 ,注意,这里(1-)->(1+),不多添加边,因为相当于求新图的最小点权覆盖集(覆盖所有边,每选一个点 恰好去除了它的边(要原图的入边或出边),),所以不可以在新图上再添加边(这里不是到不到的问题了) ,若添加…
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'. 等价字符遵循任何等价关系的一般规则: 自反性:'a' == 'a' 对称性:'a' == 'b' 则必定有 'b' == 'a' 传递性:'a' == 'b' 且 'b' == 'c' 就表明 'a' == 'c' 例如,A 和 B 的等价信息…
嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. 题目链接: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的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是…
最小点权覆盖集 二分图最小点权覆盖集解决的是这样一个问题: 在二分图中,对于每条边,两个端点至少选一个,求所选取的点最小权值和. 方法: 1.先对图二分染色,对于每条边两端点的颜色不同 2.然后建立源点S,向其中一种颜色的点连一条容量为该点权值的边 3.建立汇点T,由另一种颜色的点向T连一条容量为该点权值的边 4.对于二分图中原有的边,改为由与S相连的点连向与T相连的点的一条容量为INF的边 跑一遍最大流,其结果就是最小点权和. 原理: 实际为最小割.建好图后,对整张图求最小割,那么不可能割IN…
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'. 等价字符遵循任何等价关系的一般规则: 自反性:'a' == 'a' 对称性:'a' == 'b' 则必定有 'b' == 'a' 传递性:'a' == 'b' 且 'b' == 'c' 就表明 'a' == 'c' 例如,A 和 B 的等价信息…
看了题解.当时也觉得用邻接矩阵挺好写的,直接memset:然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic.. 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就是属于某个最小割:接下来一直重复下去,直到得到一个割边集,而它自然是字典序最小的. 我在每次某条边容量减1后都重新计算一遍最大流,简单..其实我知道是有这么一回事,把边容量减1后可以利用当前求出的最大流来得出新的最大流,这样会快一些,不过我不会... #include<cstdio> #inclu…
题目链接:http://poj.org/problem?id=1815 In modern society, each person has his own friends. Since all the people are very busy, they communicate with each other only by phone. You can assume that people A can keep in touch with people B, only if 1. A kno…
Friendship Time Limit: 2000MS   Memory Limit: 20000K Total Submissions: 8025   Accepted: 2224 Description In modern society, each person has his own friends. Since all the people are very busy, they communicate with each other only by phone. You can…
[题意]给出一个无向图,和图中的两个点s,t.求至少去掉几个点后才能使得s和t不连通,输出这样的点集并使其字典序最大. 不错的题,有助于更好的理解最小割和求解最小割的方法~ [思路] 问题模型很简单,就是无向图的点连通度,也就是最小点割集.麻烦之处在于需要使得点割集方案的字典序最大.这样的话通常的dfs划分点集的方法就行不通了.我们采取贪心的策略:枚举1~N的点,在残留网络中dfs检查其代表的边的两端点是否连通,如果不连通则该点可以为点割,那么我们就让他是点割,加入到答案中,然后删掉这条边更新最…
问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题. 最小割唯一性判定 jcvb: 在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号.显然有id[s]!=id[t](否则s到t有通路,能继续增广). ①对于任意一条满流边(u,v),(u,v)能够出现在某个最小割集中,当且仅当id[u]!=id[v]:②对于任意一条满流边(u,v),(u,v)必定出现在最小割集中,当且仅当…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路:将边排序.枚举最小边,然后将边一个一个插到并查集里,s和t联通时计算更新答案. struct node { int u,v,w; void get() { RD(u,v,w); } }; int cmp(node a,node b) { return a.w<b.w; } int n,m,s,t;…
题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列. 思路:先正着求一遍LIS,再反着求一遍LIS,然后用单调栈来模拟. 求字典序最小的话,首先找到第一个顶峰,然后往前找递减的序列中下标较小的,往后就依次找,这样能保证字典序最小. 最大的话找到最后一个顶峰,往前是依次找,往后是找LIS中下标大的. #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ; int d[N…
题意:有一张图,对于每个点,有出边和入边,现在目的是删除改图的所有边,对于每个点,删除出边的花费Wi-,删除入边的花费Wi+,现在的目的求删去所有边后的花费最小. 建图方法:对于每个点i,拆点为i,i+n,对于入边,从i+n想汇点T连边,值为入边花费:对于出边,从S向i连边,权值为出边花费.m组相连的边(x,y),从x向y+n连边, 费用INF.求出最小割. 然后是计算删除的是哪些点.对于完成最小割后的图,从源点S进行dfs,如果能够访问到,标记.对于不能访问到的点,i<=n时,这个点的出边是属…
题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大.   Input 包括多个测试实例,每…
题目链接:https://cn.vjudge.net/problem/URAL-1277 The Galaxy Police (Galaxpol) found out that a notorious gang of thieves has plans for stealing an extremely valuable exhibit from the Earth Planetary Museum — an ancient microprocessor. The police chiefs d…
Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4854   Accepted: 2241 Description The interconnection of the relays in a cable TV network is bi-directional. The network is connected if there is at least one interconnecti…
题目大意 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若 干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种. 题解 首先我们很容易用一个\(\Theta (n^2)\)的算法求出对于每个元素的lis. 考虑以下的建图方式: 由S向f[i]==1的点连边,容量为\(\infty\), 由f[i] = max 向 T 连边, 容量为\(\infty\), 对于每个点,拆为两个点,费…
模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各种模型,不过我大概花了2个星期才把它弄懂...最小密度路径的改进算法那一块的推导前面部分有些问题,但后面是对的,结论也是对的,蛋疼了好久.. 相关题目: 1.太空飞行计划(网络流24题) 题目大意: 有一些实验和仪器,做每个实验有相应的报酬,但是需要买好相应的仪器(多个实验可以共用),仪器需要相应的钱.求最大…
把入侵者看作边,每一行每一列都是点,选取某一行某一列都有费用,这样问题就是选总权最小的点集覆盖所有边,就是最小点权覆盖. 此外,题目的总花费是所有费用的乘积,这时有个技巧,就是取对数,把乘法变为加法运算,最后再还原. 另外还可以从最小割的思路去这么理解: 每一行与源点相连,容量为该行的花费:每一列与汇点相连,容量为该列的花费:对于每个入侵者的坐标,该行该列连接一条容量INF的边. 要让源点汇点不连通,割边集必然与所有入侵者的行或列相关,而这样建模后的最小割就是最小的花费(容量INF的边必然不是最…
题目大概说,给一个n×m的格子,每个格子都有数字,选择一个格子就能加上格子数字的分数,有k个格子必须选择,如果两个相邻的格子都被选择了那分数要减去两个格子数字的与再乘2.问能取得的最大分数. 已经知道这题是最小割..黑白染色,画了下图,觉得很有道理,然后写了写就AC了..具体建图是这样的: 对格子进行黑白染色形成二分图,源点向X部的点连容量为选该点能获得分数的边,Y部的点向汇点连容量为选该点能获得分数的边,对于必须选择的点则连容量INF的边 对于X部与Y部在格子中相邻的点,从X部的点向Y部的点连…
题目大概一个国家n个城市由m条单向边相连,摧毁每条边都有一个费用.现在你可以选择所给的f个城市中的若干个,每个城市选择后都有一定的价值,但首都1号城市必须到达不了你选择的城市,因为你可能需要摧毁一些边,这样你的获利就是选择城市的价值和减摧毁边的总花费.问,最大的获利是多少以及摧毁哪些边. 如此建容量网络:首都作为源点,原图中单向边的容量设为摧毁边的费用,所有可以选择的城市与汇点相连容量为选择该城市能获得的价值. 这样这个容量网络的S-T割,就能把首都划分到S集合要选择的划分到T集合二者分开,且其…
[题意]给出一个无向图,每个点有一个标号mark[i],不同点可能有相同的标号.对于一条边(u, v),它的权值定义为mark[u] xor mark[v].现在一些点的标号已定,请决定剩下点的标号,使得总的边权和最小.(0 < N <= 500, 0 <= M <= 3000, 0 <= mark[i] <= 2^31-1) 胡伯涛神牛<最小割模型在信息学竞赛中的应用>中的例题.非常好的一道题!非常推荐! [思路] 我们把问题数学化就是:  Minimum…
[题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等价为: Minimize   λ = f(x) = sigma(wexe)/sigma(1*xe) = w•x / c•x 其中, x表示一个解向量,xe∈{0, 1} ,即对于每条边都有选与不选两种决策,并且选出的边集组成一个s-t边割集. 联系已有的知识,这是一个0-1分数规划.在胡伯涛<最小割…
题目请戳这里 题目大意:给一张有向图,现在要选择一些点,删掉图中的所有边.具体操作为:选择点i,可以选择删除从i出发的所有有向边或者进入i的所有有向边,分别有个代价ini和outi,求最小的代价删掉所有边.并输出删除方案. 题目分析:最小割.因为每次删除的是一个点的所有入边或者所有出边.那么就很明显了,拆点,将i拆成i和I+n2个点,分别表示第i个点的入度点和出度点.源点到每个i连边,表示从i点的出边,边权为outi,i+n表示第i个点的入度点,那么i+n-->汇点建边,边权为ini,对于每对给…
3532: [Sdoi2014]Lis Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 704  Solved: 264[Submit][Status][Discuss] Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种. Input 输入包含多组数据.   …
题目详解出自 论文 Amber-最小割模型在信息学竞赛中的应用 题目大意: 给出一个带权无向图 G = (V,E), 每条边 e属于E都有一个权值We,求一个割边集C,使得该割边集的平均边权最小,即最小化: 1. 将等式转换,引入x向量,Xi取值为(0,1),得到0-1分数规划常规式: 2.       将其转换得到一个关于的一个函数: 3.       其中为单调递减函数, 当且仅当  = 0 , 为最优值. 然后我们可以二分枚举最优值 , 然后判定当前最优值是否符合要求. 判定思路:  对于…