【算法】网络流-最小费用最大流(费用流)

【题解】与方格取数2类似

在S后添加辅助点S_,限流k

每条边不能重复走,限流1

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f,maxn=,maxN=;
struct edge{int from,v,flow,cost;}e[];
int n,m,k,tot=,first[maxN],p[maxn][maxn*],q[],d[maxN],N,S,T,S_;//梯形输入,p的第二维翻倍
long long ans;
bool vis[maxN];
void insert(int u,int v,int flow,int cost)
{
tot++;e[tot].v=v;e[tot].flow=flow;e[tot].cost=cost;e[tot].from=first[u];first[u]=tot;
tot++;e[tot].v=u;e[tot].flow=;e[tot].cost=-cost;e[tot].from=first[v];first[v]=tot;
}
bool spfa()
{
memset(d,0x3f,(N+N+)*);
memset(vis,,N+N+);
int head=,tail=;q[]=T;
vis[T]=;d[T]=;
while(head!=tail)
{
int x=q[head++];if(head>=)head=;
for(int i=first[x];i;i=e[i].from)
if(e[i^].flow&&e[i^].cost+d[x]<d[e[i].v])
{
d[e[i].v]=d[x]+e[i^].cost;
if(!vis[e[i].v])
{
vis[e[i].v]=;q[tail++]=e[i].v;
if(tail>=)tail=;
}
}
vis[x]=;
}
return d[S]<inf;
}
int dfs(int x,int a)
{
vis[x]=;
if(x==T||a==)return a;
int flow=,f;
for(int i=first[x];i;i=e[i].from)
if(!vis[e[i].v]&&d[e[i].v]+e[i].cost==d[x]&&(f=dfs(e[i].v,min(a,e[i].flow)))>)//记得判vis
{
e[i].flow-=f;//正边-,反向弧+
e[i^].flow+=f;
ans+=e[i].cost*f;
a-=f;
flow+=f;
if(a==)break;
}
return flow;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
N=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m+i-;j++)
{
N++;
p[i][j]=N;
}
}
S=,S_=N+N+,T=N+N+;//N计算出来后才赋值
for(int i=;i<=n;i++)
{
for(int j=;j<=m+i-;j++)
{
int x;
scanf("%d",&x);
insert(p[i][j],p[i][j]+N,,-x);
if(i<n)
{
insert(p[i][j]+N,p[i+][j],,);
insert(p[i][j]+N,p[i+][j+],,);
}
}
}
insert(S,S_,k,);
for(int i=;i<=m;i++)insert(S_,i,,);
for(int i=;i<=m+n-;i++)insert(p[n][i]+N,T,,);
ans=;
while(spfa())
{
// for(int i=0;i<=N+N+2;i++)printf("[%d]%d\n",i,d[i]);
memset(vis,,N+N+);
dfs(S,inf);
}
printf("%lld",-ans);
return ;
}

【CODEVS】1033 蚯蚓的游戏问题的更多相关文章

  1. codevs 1033 蚯蚓的游戏问题

    Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1)  a(1,2)…a(1,m) a(2,1)  a(2,2)  a(2,3)…a ...

  2. 【wikioi】1033 蚯蚓的游戏问题(费用流)

    http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每 ...

  3. codevs 1051 接龙游戏

    codevs 1051 接龙游戏 http://codevs.cn/problem/1051/ 题目描述 Description 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i- ...

  4. CODEVS_1033 蚯蚓的游戏问题 网络流 最小费用流 拆点

    原题链接:http://codevs.cn/problem/1033/ 题目描述 Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1 ...

  5. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

  6. 【codevs1033】 蚯蚓的游戏问题

    http://codevs.cn/problem/1033/ (题目链接) 题意 给出一个梯形的数列,每一个数可以向它左下方和右下方的数走.求从第一行走到最后一行的不重叠的K条路径,使得经过的数的和最 ...

  7. codevs1033 蚯蚓的游戏问题

    题目描述 Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1)  a(1,2)…a(1,m) a(2,1)  a(2,2)  a(2 ...

  8. codevs 1052 地鼠游戏 优先队列

    1052 地鼠游戏 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1052/ Descriptio ...

  9. Codevs1033 蚯蚓的游戏

    题目描述 Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1)  a(1,2)…a(1,m) a(2,1)  a(2,2)  a(2 ...

随机推荐

  1. 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索

    安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...

  2. 《高性能JavaScript》学习笔记——日更中

    ------------------2016-7-20更------------------ 最近在看<高性能JavaScript>一书,里面当中,有讲很多提高js性能的书,正在看的过程中 ...

  3. PAT 甲级 1083 List Grades

    https://pintia.cn/problem-sets/994805342720868352/problems/994805383929905152 Given a list of N stud ...

  4. Struts2拦截器配置和使用

    拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 说到拦截器interceptor,就会想到过滤器filter: 过滤器f ...

  5. session的基本原理

    转载:http://blog.sina.com.cn/s/blog_8155e74d0101iqmh.html 如何严格限制session在30分钟后过期! 1.设置客户端cookie的lifetim ...

  6. php缩略图

    /*引入文件Easyphpthumbnail.class.php 引用地址:http://www.itdaodan.com/article-detail-id-252.html */   class ...

  7. Html5新增元素中Canvas 与内联SVG的比较!

    SVG与Canvas的区别与比较如下: svg:使用xml描述2D图形,canvas使用javascript描述2D图形. Canvas 是逐像素进行渲染的,在 canvas 中,一旦图形被绘制完成, ...

  8. Android Studio 修改 包名

    Android Studio上修改项目(module)的包名(Package Name)   当你对着包名右击,查找Refactor(重构)下的Rename(快捷键:SHIFT+F6)时,弹出来的仅仅 ...

  9. uva1391-Astronauts

    宇航员执行任务,有三个任务ABC.把宇航员按照平均年龄分成新老两组,老宇航员可以去AC,新宇航员可以取BC.宇航员之间有不能共存关系,问是否有合法的分配方案. 分析 虽然有三个任务,但每个宇航员还是只 ...

  10. Contest 4

    A:cf原题.当然是不是也没什么关系. #include<iostream> #include<cstdio> #include<cstdlib> #include ...