博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】Luogu P2766 最长不下降子序列问题
阅读量:5015 次
发布时间:2019-06-12

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

实际还是比较套路的建图

先暴力dp一下反正数据很小

第一小问的答案即珂以求出数列的最长不下降子序列的长度s

考虑第二问如何做:

将每个点拆点

从前向后连一条流量为1的边

如果以它为终点的最长不下降子序列长度为1,从源点向它(前)连一条流量为1的边

如果以它为终点的最长不下降子序列长度为s,从它(后)向汇点连一条流量为1的边

如果一个点为终点的最长不下降子序列长度加一等于以它后面一个点为终点最长不下降子序列长度且(注意:是而且)前者的数值小于等于后者的数值,珂以从前者(后)向后者(前)连一条流量为1的边

跑一下ISAP就的出子任务2的答案

第三个子问题很简单,只需再稍加改进

从源点向1号点(前)连一条流量为inf的边,从1号点前面向后连一条流量为inf的边

当以n号点为终点的最长不下降子序列长度为s,从n号点(后)向汇点连一条流量为inf的边,从n号点前面向后连一条流量为inf的边

在跑一边ISAP就能求出子问题3的答案

注意:子任务3最大流算出来的答案要加上子任务2的答案(做子任务3时ISAP跑的图已经是残量网络了)

#include 
#define N 505#define M 50005#define inf 0x7f7f7f7f#define getchar ncusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline int read(){ register int x=0,f=1;register char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*f;}inline void write(register int x){ if(!x)putchar('0');if(x<0)x=-x,putchar('-'); static int sta[20];register int tot=0; while(x)sta[tot++]=x%10,x/=10; while(tot)putchar(sta[--tot]+48);}inline int Max(register int a,register int b){ return a>b?a:b;}inline int Min(register int a,register int b){ return a
q; q.push(t); while(!q.empty()) { int u=q.front(); q.pop(); for(register int i=head[u];i;i=e[i].nxt) { int v=e[i].to; if(dep[v]!=-1) continue; q.push(v); dep[v]=dep[u]+1; ++gap[dep[v]]; } }}inline int dfs(register int u,register int flow){ if(u==t) { maxflow+=flow; return flow; } int used=0; for(register int i=cur[u];i;i=e[i].nxt) { cur[u]=i; int v=e[i].to; if(e[i].v&&dep[v]+1==dep[u]) { int tmp=dfs(v,Min(e[i].v,flow-used)); if(tmp) { e[i].v-=tmp; e[i^1].v+=tmp; used+=tmp; } if(used==flow) return used; } } --gap[dep[u]++]==0?dep[s]=nn+1:++gap[dep[u]]; return used;}inline void ISAP(){ bfs(); while(dep[s]

转载于:https://www.cnblogs.com/yzhang-rp-inf/p/10339370.html

你可能感兴趣的文章
unit
查看>>
2017-10-17 NOIP模拟赛2
查看>>
How to install ia32-libs in Ubuntu 14.04 LTS (Trusty Tahr)
查看>>
ACM/ICPC 之 模拟 (HNUOJ 13391-换瓶模拟)
查看>>
JavaWeb学习——JSP基础
查看>>
Eclipse tomcat server 无法添加项目
查看>>
黑寡妇黄飞鸿
查看>>
leetcode 217 Contains Duplicate 数组中是否有重复的数字
查看>>
The Ctrl & CapsLock `problem'
查看>>
MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
查看>>
linux故障判断
查看>>
Leetcode 23. Merge k Sorted Lists(python)
查看>>
Java进阶知识点6:并发容器背后的设计理念 - 锁分段、写时复制和弱一致性
查看>>
Makefile ===> Makefile 快速学习
查看>>
face detection[HR]
查看>>
java性能调优工具
查看>>
C# 其他的Url 文件的路径转化为二进制流
查看>>
cmake使用
查看>>
ios7上隐藏status bar
查看>>
构造方法和全局变量的关系
查看>>