因为蚯蚓走过的路径不能重合,所以把每个点拆成两个点,容量赋为1,保证不会走过相同的点,再加超级源点(程序中为1)和一个辅助点(程序中为2)容量赋为k来控制蚯蚓的数量,最后汇集到一个超级汇点上。做一遍最小费用最大流即可。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct charge{
int u,v,cost,c,next;
}f[];
int n,m,k,num=,cnt=,point[],q[],pre[],dist[];
bool vis[];
void insect(int x,int y,int co,int bei)
{
f[cnt].u=x;f[cnt].v=y;f[cnt].cost=bei;f[cnt].c=co;
f[cnt].next=point[x];point[x]=cnt++;
f[cnt].u=y;f[cnt].v=x;f[cnt].cost=-bei;f[cnt].c=;
f[cnt].next=point[y];point[y]=cnt++;
}
bool spfa(int begin,int end)
{
int mp,a,b,head=,tail=;
memset(q,,sizeof(q));
memset(pre,0xff,sizeof(pre));
memset(dist,0x7f,sizeof(dist));
memset(vis,,sizeof(vis));
q[]=begin; dist[begin]=; vis[begin]=;
while (head<=tail)
{
a=q[head];
vis[a]=;
mp=point[a];
while (mp>=)
{
if (f[mp].c>){
b=f[mp].v;
if (dist[b]>dist[a]+f[mp].cost)
{
dist[b]=dist[a]+f[mp].cost;
pre[b]=mp;
if (!vis[b]){vis[b]=;tail++;q[tail]=b;}
}
}
mp=f[mp].next;
}
head++;
}
return dist[end]!=;
}
int MCMF(int begin,int end)
{
int ans=,mp,i,flow,flowsum=;
while (spfa(begin,end))
{
flow=;
for (i=pre[end];i!=-;i=pre[f[i].u])
if (f[i].c<flow) flow=f[i].c;
for (i=pre[end];i!=-;i=pre[f[i].u])
{
f[i].c-=flow;
f[i^].c+=flow;
}
ans+=dist[end];
flowsum+=flow;
}
return ans;
}
int main()
{
scanf("%d %d %d\n",&n,&m,&k);
int i,a,b,c,j,ff;
memset(point,0xff,sizeof(point));
insect(,,k,);
for (i=;i<=m;++i)
{
scanf("%d",&c); num+=;
insect(,num-,,); insect(num-,num,,-c);
}
ff=;
for (i=;i<=n;++i)
{
for (j=;j<=m+i-;++j)
{
scanf("%d",&c); num+=;
if (j>) insect(ff-,num-,,);
if (j<m+i-) insect(ff,num-,,);
insect(num-,num,,-c);
ff+=;
}
ff=num+-(m+i-)*;
}
for (i=;i<=m+n-;++i)
insect(num-(m+n-)*+i*,num+,,);
num++;
printf("%d\n",-*MCMF(,num));
return ;
}

codevs1033 蚯蚓的游戏问题 裸最小费用最大流,注意要拆点的更多相关文章

  1. UVA 1658 海军上将(拆点法+最小费用限制流)

    海军上将 紫书P375 这题我觉得有2个难点: 一是拆点,要有足够的想法才能把这题用网络流建模,并且知道如何拆点. 二是最小费用限制流,最小费用最大流我们都会,但如果限制流必须为一个值呢?比如这题限制 ...

  2. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

  3. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  4. UVa 10806 Dijkstra,Dijkstra(最小费用最大流)

    裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...

  5. [Ahoi2014]支线剧情[无源汇有下界最小费用可行流]

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1538  Solved: 940[Submit][Statu ...

  6. BZOJ 3876:支线剧情(有下界最小费用最大流)

    3876: [Ahoi2014]支线剧情 Description [故事背景]宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧 ...

  7. POJ2195 Going Home —— 最大权匹配 or 最小费用最大流

    题目链接:https://vjudge.net/problem/POJ-2195 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total ...

  8. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  9. bzoj1927最小费用最大流

    其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对 我当时就这表情→   =_=你TM逗我 刚要删突然感觉dinic的模 ...

随机推荐

  1. Bzoj4870 [SXOI2017]组合数问题

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 155  Solved: 78 Description Input 第一行有四个整数 n, p, k, ...

  2. 实现拷贝函数(strcpy)

    #include <stdio.h> #include <stdlib.h> // 函数声明 char *mystrcpy(char *object, char *source ...

  3. vue router mode 设置"hash"与"history"的区别

    router官网的说明如下: ********************************************我是官网说明分隔符--开始**************************** ...

  4. 【Eclipse】Eclipse中修改项目的映射名称与端口

    1.正常部署(映射的名字为项目名字,端口为8080)

  5. io多路复用-select()

    参照<Unix网络编程>相关章节内容,实现了一个简单的单线程IO多路复用服务器与客户端. 普通迭代服务器,由于执行recvfrom则会发生阻塞,直到客户端发送数据并正确接收后才能够返回,一 ...

  6. Eudyptula Challenge

    http://www.eudyptula-challenge.org/ The Eudyptula Challenge What is it? The Eudyptula Challenge is a ...

  7. python基础=== itertools介绍(转载)

    原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  8. 502 bad gateway,ngix

    1.ftm对nginx的解析出现问题:20171228

  9. linux命令行任务管理

    今天看到了linux命令行的任务管理命令感觉很实用: 1.ctrl+z  将当前前台执行的任务放到后台并暂停 2.fg恢复上次放入后台的任务 这两个命令组合起来很实用,比如在linux命令行中写pyt ...

  10. UVALive 5099

    B - Nubulsa Expo Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit S ...