博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3308 [SDOI2014]LIS(最小割+退流)
阅读量:6277 次
发布时间:2019-06-22

本文共 1073 字,大约阅读时间需要 3 分钟。

\(f[i]\)为以\(i\)结尾的最长上升子序列。可以考虑建这样一张图,对于所有的\(i<j,f[j]=f[i+1]\)连边\((i,j)\)\(f[i]=1\)的话连边\((S,i)\)\(f[i]=max(f[j])\)的话连边\((j,T)\),然后就是删去若干个点使\(S,T\)不连通并且代价最小,那么拆点最小割就行了

然后是字典序的问题。我们把所有的点按\(c\)排个序然后看看这个点也就是新图中的这条边是否可以在最小割里。只要判断一下残量网络中是否存在\(u\)\(u+n\)的路径就是了

然后删去这条边之后要重新算最大流,如果直接计算会T,这样的话我们可以退流,就是从\(T\)\(u+n\)跑一次最大流再从\(u\)\(S\)跑一次最大流就可以消除这条边的影响

//minamoto#include
#define R register#define inf 0x3f3f3f3f#define fp(i,a,b) for(R int i=a,I=b+1;i
I;--i)#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)template
inline bool cmax(T&a,const T&b){return a
'9'||ch<'0')(ch=='-')&&(f=-1); for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0'); return res*f;}const int N=1e4+5,M=1e6+5;struct eg{int v,nx,w;}e[M];int head[N],tot=1;inline void add(R int u,R int v,R int w){ e[++tot]={v,head[u],w},head[u]=tot; e[++tot]={u,head[v],0},head[v]=tot;}struct node{ int c,id; inline bool operator <(const node &b)const{return c

转载于:https://www.cnblogs.com/bztMinamoto/p/10140161.html

你可能感兴趣的文章
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>