题面:洛谷传送门 BZOJ传送门

题目大意:给你一张有向无环图,边有边权,让我们用任意条从1号点开始的路径覆盖这张图,需要保证覆盖完成后图内所有边都被覆盖至少一次,求覆盖路径总长度的最小值

最小费用可行流板子题..

有源汇最小费用可行流

给定一张有源汇网络流图,必须保证图中每条边的流量都$\in[l,r]$,求最小费用的可行流

我们要想办法把问题转化成最小费用最大流,即每条边流量需求都是$[0,r-l]$的

对于每个点,设$p_{i}$表示$i$点 入边流量下界之和 减掉 出边流量下界之和

根据流量守恒,且我们要求的是最小费用可行流,多余的(去掉后仍然符合要求的)流量要尽可能少

如果$p_{i}>0$,说明当流量尽可能少的时候,流入>流出,修改流量上下界以后,这个点必须要多输入$p_{i}$点流量,才能保证符合流入的下界要求

源点$S$向$i$点连一条流量为$p_{i}$,费用为$0$的边

反之$p_{i}<0$,流出>流入,这个点必须要多输出$p_{i}$点流量,才能保证符合流出的下界要求

$i$点向汇点$T$连一条流量为$p_{i}$,费用为$0$的边

图中的其他边流量都是$[0,r-l]$,费用不变

然后跑最小费用最大流即可

对这道题而言,把$DAG$看成网络流图,那么我们需要保证图中每条边都有流量,即流量的合法范围是$[1,inf]$,按上述方式建图后,跑最小费用最大流即可

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 310
#define M1 6010
using namespace std;
const int inf=0x3f3f3f3f; int gint()
{
int ret=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
struct Edge{
int to[M1<<],nxt[M1<<],flow[M1<<],cost[M1<<],head[N1],cte;
void ae(int u,int v,int f,int c)
{
cte++; to[cte]=v; nxt[cte]=head[u];
head[u]=cte; flow[cte]=f; cost[cte]=c;
}
}e; int dis[N1],use[N1],que[M1*],flow[N1],id[N1],hd,tl,S,T;
int n,K[N1],cnt;
int spfa()
{
int x,j,v;
memset(dis,0x3f,(T+)<<); memset(flow,,(T+)<<);
hd=,tl=; que[++tl]=S; dis[S]=; use[S]=; flow[S]=inf;
while(hd<=tl)
{
x=que[hd++];
for(j=e.head[x];j;j=e.nxt[j])
{
v=e.to[j];
if( dis[v]>dis[x]+e.cost[j] && e.flow[j]> )
{
dis[v]=dis[x]+e.cost[j]; id[v]=j;
flow[v]=min(flow[x],e.flow[j]);
if(!use[v]) que[++tl]=v, use[v]=;
}
}
use[x]=;
}
return dis[T]!=inf;
}
int mxflow=,tcost=;
void EK()
{
int x,fl;
while(spfa())
{
fl=flow[T]; mxflow+=fl; tcost+=fl*dis[T];
for(x=T;x!=S;x=e.to[id[x]^])
{
e.flow[id[x]]-=fl;
e.flow[id[x]^]+=fl;
}
}
}
int inc[N1]; int main()
{
scanf("%d",&n);
int i,j,x,y,v,ans=; S=; T=n+; e.cte=;
e.ae(S,,inf,); e.ae(,S,,);
for(i=;i<=n;i++)
{
K[i]=gint();
for(j=;j<=K[i];j++)
{
x=gint(); y=gint();
inc[i]--; inc[x]++; ans+=y;
e.ae(i,x,inf,y); e.ae(x,i,,-y);
}
}
for(i=;i<=n;i++)
{
if(inc[i]>) e.ae(S,i,inc[i],), e.ae(i,S,,);
if(inc[i]<) e.ae(i,T,-inc[i],), e.ae(T,i,,);
}
EK(); ans+=tcost;
printf("%d\n",ans);
return ;
}

BZOJ 3876 [AHOI/JSOI2014]支线剧情 (最小费用可行流)的更多相关文章

  1. bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】

    每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf) ...

  2. BZOJ 3876 [Ahoi2014&Jsoi2014]支线剧情

    题解: 带下界的费用流 对于x->y边权为z Addedge(x,t,1,0) Addedge(s,y,1,z) Addedge(x,y,inf,0) 然后对每个点Addedge(i,1,inf ...

  3. BZOJ 3876 支线剧情 有源汇有上下界最小费用可行流

    题意: 给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和 分析: 这道题乍一看,可能会想到什么最小链覆盖之类的,但是仔细一想,会发现不行,一是因 ...

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

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

  5. BZOJ 2055 80人环游世界 有上下界最小费用可行流

    题意: 现在有这么一个m人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家.    因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为1...N.假若第 ...

  6. 【CF708D】Incorrect Flow 最小费用可行流

    [CF708D]Incorrect Flow 题意:给你一个点数为n,边数为m的流网络,每条边有一个容量c和流量f,这个网络可能是不合法的.你可以花费1的代价使c或f减少或增加1,可以修改无限次.你不 ...

  7. bzoj 1877 [SDOI2009]晨跑(最小费用最大流)

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...

  8. bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1576  Solved: 954[Submit][Statu ...

  9. bzoj 2245 [SDOI2011]工作安排(最小费用最大流)

    2245: [SDOI2011]工作安排 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1197  Solved: 580[Submit][Statu ...

随机推荐

  1. 洛谷 P2728 纺车的轮子 Spinning Wheels

    P2728 纺车的轮子 Spinning Wheels 题目背景 一架纺车有五个纺轮(也就是五个同心圆),这五个不透明的轮子边缘上都有一些缺口.这些缺口必须被迅速而准确地排列好.每个轮子都有一个起始标 ...

  2. Spring Boot 配置Oracle数据库

    1.添加oralce 依赖包,仓库没有则通过maven装载到本地仓库: 2.application.properties 中添加配置,特别是第一个配置项要严重注意! spring.jpa.databa ...

  3. javascript面向对象之Javascript 继承

    转自原文javascript面向对象之Javascript 继承 在JavaScript中实现继承可以有多种方法,下面说两种常见的. 一,call 继承 先定义一个“人”类 //人类 Person=f ...

  4. [Python] Use Static Typing in Python 3.6

    In this lesson, you will learn how to statically type variables in Python 3.6 Static typing can help ...

  5. Nova和Heat中的servergroup

    如今nova能够通过命令创建一个server group,在server group中的vm能够指定一些policy. 这些policy包含affinity和anti-affinity.affinit ...

  6. iOS模仿微信的那个视频眼睛动画

    咳咳,费死老劲把这个动画搞出来了. 欢迎批评指正   github URL: https://git.oschina.net/momochao/WeChatEyeDemo

  7. linux中udev简单的用法【转】

    本文转载自:http://blog.csdn.net/qq_29729577/article/details/50825134 udev是Linux提供的一种在用户态管理设备的一种机制,udev的详细 ...

  8. bzoj4247: 挂饰(背包)

    4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...

  9. [APIO 2010] 巡逻

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1912 [算法] 树的直径 [代码] #include<bits/stdc++. ...

  10. 南海区行政审批管理系统接口规范v0.3(规划) 2.业务申报API 2.1.businessApply【业务申报】

    {"v_interface":"2015987654327","c_project":"NH09A102"," ...