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

【题解】与方格取数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. EF 联合查询

    EF 文章表和标签表联合查询标签id在dis中的文章,还不知道性能如何 var query = tagRepo.Entities.Include("Tags").Where(t = ...

  2. 利用canvas对上传图片进行上传前压缩

    利用谷歌调式工具发现,图片大小直接影响着首屏加载时间. 且考虑到后期服务端压力,图片压缩特别必要. 本文是前端利用canvas实现图片.参考文章:https://www.cnblogs.com/007 ...

  3. (转)设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)

    Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...

  4. RAD Studio 10.3 Rio (BCB & Dephi) 发布啦

    期盼已久的RAD Studio 10.3 Rio  终于发布了: 下载链接:http://altd.embarcadero.com/download/radstudio/10.3/delphicbui ...

  5. 第84天:jQuery动态创建表格

    jQuery动态创建表格 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  6. 【loj2325】「清华集训 2017」小Y和恐怖的奴隶主 概率dp+倍增+矩阵乘法

    题目描述 你有一个m点生命值的奴隶主,奴隶主受伤未死且当前随从数目不超过k则再召唤一个m点生命值的奴隶主. T次询问,每次询问如果如果对面下出一个n点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输 ...

  7. HttpHelper类及调用

    首先列出HttpHelper类 /// <summary> /// Http操作类 /// </summary> public class HttpHelper { priva ...

  8. [BZOJ3166][Heoi2013]Alo 可持久化Trie树

    3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MB DescriptionWelcome to ALO ( Arithmetic a ...

  9. 【CF625E】Frog Fights(模拟)

    [CF625E]Frog Fights(模拟) 题面 CF 洛谷 翻译: 有\(n\)只青蛙在一个被分为了\(m\)等分的圆上,对于每份顺时针依次标号. 初始时每只青蛙所在的位置是\(p_i\),速度 ...

  10. 解题:POI 2015 Kinoman

    题面 发现每种电影只在两场之间产生贡献(只有$pos$的一场的就在$[pos,n]$产生贡献).那么我们针对每个位置$i$求出这场电影下一次出现的位置$nxt[i]$,然后每次更新一下,求整个区间的最 ...