http://acm.hdu.edu.cn/showproblem.php?pid=3998

求LIS的长度,并且求有多少组互不相交的LIS

求组数用最大流

建图如下:

if(dp[i]==1)add(S,i,1) ;
if(dp[i]==ans)add(i+n,T,1) ;

if(j>i && dp[j]==dp[i]+1)add(i+n,j,1) ;

如此到汇点1的流量就代表1组LIS的解

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std ;
const int INF=0xfffffff ;
struct node
{
int s,t,cap,nxt ;
}e[] ;
int m,n,cnt,head[],level[],q[] ;
void add(int s,int t,int cap)
{
e[cnt].s=s ;e[cnt].t=t ;e[cnt].cap=cap ;e[cnt].nxt=head[s] ;head[s]=cnt++ ;
e[cnt].s=t ;e[cnt].t=s ;e[cnt].cap= ;e[cnt].nxt=head[t] ;head[t]=cnt++ ;
}
bool build(int s,int t)
{
int front=,rear= ;
memset(level,-,sizeof(level)) ;
q[rear++]=s ;
level[s]= ;
while(front<rear)
{
int u=q[front++] ;
for(int i=head[u] ;i!=- ;i=e[i].nxt)
{
int tt=e[i].t ;
if(level[tt]==- && e[i].cap>)
{
level[tt]=level[u]+ ;
if(tt==t)return true ;
q[rear++]=tt ;
}
}
}
return false ;
}
int find(int s,int t,int flow)
{
if(s==t)return flow ;
int ret=,a ;
for(int i=head[s] ;i!=- ;i=e[i].nxt)
{
int tt=e[i].t ;
if(level[tt]==level[s]+ && e[i].cap>)
{
a=find(tt,t,min(e[i].cap,flow-ret)) ;
e[i].cap-=a ;
e[i^].cap+=a ;
ret+=a ;
if(ret==flow)
return ret ;
}
}
if(!ret)level[s]=- ;
return ret ;
}
int dinic(int s,int t)
{
int flow,ret= ;
while(build(s,t))
while(flow=find(s,t,INF))
ret+=flow ;
return ret ;
}
int a[],dp[] ;
int main()
{
while(~scanf("%d",&n))
{
for(int i= ;i<=n ;i++)
scanf("%d",&a[i]) ;
int ans= ;
for(int i= ;i<=n ;i++)
{
dp[i]= ;
for(int j= ;j<i ;j++)
if(a[j]<a[i] && dp[j]+>dp[i])
dp[i]=dp[j]+ ;
ans=max(ans,dp[i]) ;
}
int S,T ;
S= ;T=*n+ ;
cnt= ;
memset(head,-,sizeof(head)) ;
for(int i= ;i<=n ;i++)
{
add(i,i+n,) ;
if(dp[i]==)add(S,i,) ;
if(dp[i]==ans)add(i+n,T,) ;
for(int j=i+ ;j<=n ;j++)
{
if(dp[j]==dp[i]+)
add(i+n,j,) ;
}
}
printf("%d\n%d\n",ans,dinic(S,T)) ;
}
return ;
}

最新文章

  1. 使用Axis2编写webservice客户端,服务端
  2. 数据库事物四大特性-ACID
  3. 论APP测试中黑盒测试方案的重要性?
  4. 内联函数inline
  5. solrj6.2异常--Expected mime type application/octet-stream but got text/html.
  6. 在jdbc中使用properites文件进行使用
  7. python脚本难点
  8. Python数据分析入门
  9. java虚拟机知识和 内存 堆(heap)、栈(stack)和方法区(method)
  10. 【WEB前端】CSS书写规范
  11. es6安装babel包
  12. IIS7虚拟目录出现HTTP错误500.19(由于权限不足而无法读取配置文件)的解决方案
  13. Discuz x3.2七牛远程附件设置
  14. merge into优化sql(转)
  15. java 关于操作Collection的一点说明
  16. 14.Longest Common Prefix (String)
  17. SQL Server 2012 - SQL查询
  18. pat09-散列3. Hashing - Hard Version (30)
  19. Drawable(6)关于StateList的补充
  20. codeforces Gym 100735 D、E、G、H、I

热门文章

  1. python json格式转xml格式
  2. 语言小知识-Java ArrayList类 深度解析
  3. RPC 服务器不可用
  4. C# 通过Newtonsoft.Json.dll序列化日期的处理
  5. 图片保存到数据库以及C#读取图片
  6. C# Arc Gis实例教程——网络链接
  7. C# 导出HTML为Excel
  8. Mishka and Divisors CodeForces - 703E
  9. thinkphp数组处理
  10. IOS UI-滚动视图(UIScrollView)