题目大意 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若 干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种. 题解 首先我们很容易用一个\(\Theta (n^2)\)的算法求出对于每个元素的lis. 考虑以下的建图方式: 由S向f[i]==1的点连边,容量为\(\infty\), 由f[i] = max 向 T 连边, 容量为\(\infty\), 对于每个点,拆为两个点,费…
BZOJ 洛谷 \(LIS\)..经典模型? 令\(f_i\)表示以\(i\)结尾的\(LIS\)长度. 如果\(f_i=1\),连边\((S,i,INF)\):如果\(f_i=\max\limits_{j=1}^n\{f_j\}\),连边\((i,T,INF)\):如果\(f_i=f_j+1,\ j<i\),连边\((j,i,INF)\). 这样使\(LIS\)长度至少减少\(1\),就是删掉图中的一些点,使得\(S,T\)不连通. 拆点,把\(i\)拆成\(X_i,Y_i\),连边\((X_…
http://www.lydsy.com/JudgeOnline/problem.php?id=3532 如果没有字典序的限制,那么DP拆点最小割即可 加上字典序的限制: 按c从小到大枚举最小割边集中的边,去掉这条边对网络的影响,继续枚举直至获得最小割边集 判断是不是最小割边集中的边: 在残量网络中边的起点和终点不连通 注:最小割边集中的边一定满流,但满流边不一定是最小割边集中的边 如下图所示,流量为1和3的两条边满流,但最小割边集为流量为4的那条边 去掉一条边对网络的影响: 边:u-->v 这…
题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相连,a2与a3相连,等等,那么电脑a1和a(c)就可以互发电邮. 很不幸,有时候奶牛会不小心踩到电脑上,农夫约翰的车也可能碾过电脑,这台倒霉的电脑就会坏掉.这意味着这台电脑不能再发送电邮了,于是与这台电脑相关的连接也就不可用了. 有两头奶牛就想:如果我们两个不能互发电邮,至少需要坏掉多少台电脑呢?请…
题意翻译 题目大意: 给定一个n(n <= 50)个点的无向图,求它的点联通度.即最少删除多少个点,使得图不连通. 解析 网络瘤拆点最小割. 定理 最大流\(=\)最小割 感性地理解(口胡)一下:首先显然最大流\(<=\)割,而根据最大流定义,最小割恰恰就是要恰好割断最大流经过的所有最窄流量的边集,就能恰好使得源点和汇点不连通,即最大流\(=\)最小割. 至于具体的证明,我也不知道. 拆点 一般来说,正常的拆点有两个作用: 在不改变原图连通性的情况下,将点权转化为边权. 通过化点为边,限制通过…
题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边,从所有值为0的点向T连一条inf的边 然后对于每个值为1的点分析: 把点拆成A部和B部 改立场后自我谴责,从A部向B部连一条 改立场后本来同立场的朋友谴责,从$x_{A}$向$y_{B}$连一条 然后本来立场就不一样的朋友相信大家都会搞 然后最小割转最大流,dinic跑一下就A了 其实这题貌似不能…
//以行列建点,伞兵位置为单向边-利用对数将乘积转加法 //最小割转最大流 //Time:63Ms Memory:792K #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> using namespace std; #define MAXN 105 #define INF 1…
f[i]表示以i为结尾的LIS长度 对于所有f[i]=1的,由S向i连边 对于所有f[i]=maxf的,由i向T连边 对于j<i,a[j]<a[i],且f[j]+1=f[i]的,j向i连边 将每个点拆点求最小割 对于字典序最小, 按C从小到大排序, 对于C第i小的点,将b减去$2^{-i}$ 最后最小总代价为最大流的整数部分+1 方案的二进制表示为1-最大流的小数部分 用高精度二进制,压62位 #include<cstdio> #include<algorithm> t…
http://poj.org/problem?id=1815 题意: 在现代社会,每个人都有自己的朋友.由于每个人都很忙,他们只通过电话联系.你可以假定A可以和B保持联系,当且仅当:①A知道B的电话号码:②A知道C的电话号码,而C能联系上B.如果A知道B的电话号码,则B也知道A的电话号码. 思路:这题是要我们删点,既然是删点,那么就要拆点,容量就是1. 接下来凡是能联系的,就连边,容量为INF,因为我们不是要删除这些边.跑遍最大流就能算出至少要删除多少个点. 这道题的关键是要字典序顺序输出最小割…
题意:求最小割,即求最大流即可.此题之关键为拆点(限制在点),每条边都是双向边,注意一下. 未1A原因:在拆点之后添加边的过程中,要注意,出去的是i`,进来的是i,!!所以,写addegde函数时候 还是每次添加一单项边就好,之后手动调用,可以注意出入之边即可.简单题. #include<iostream>//15ms #include<cstdio> #include<queue> using namespace std; int n,m,start,last; in…