BZOJ 3876 [AHOI/JSOI2014]支线剧情 (最小费用可行流)
题面:洛谷传送门 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]支线剧情 (最小费用可行流)的更多相关文章
- bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】
每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf) ...
- 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 ...
- BZOJ 3876 支线剧情 有源汇有上下界最小费用可行流
题意: 给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和 分析: 这道题乍一看,可能会想到什么最小链覆盖之类的,但是仔细一想,会发现不行,一是因 ...
- [Ahoi2014]支线剧情[无源汇有下界最小费用可行流]
3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1538 Solved: 940[Submit][Statu ...
- BZOJ 2055 80人环游世界 有上下界最小费用可行流
题意: 现在有这么一个m人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家. 因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为1...N.假若第 ...
- 【CF708D】Incorrect Flow 最小费用可行流
[CF708D]Incorrect Flow 题意:给你一个点数为n,边数为m的流网络,每条边有一个容量c和流量f,这个网络可能是不合法的.你可以花费1的代价使c或f减少或增加1,可以修改无限次.你不 ...
- bzoj 1877 [SDOI2009]晨跑(最小费用最大流)
Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...
- bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1576 Solved: 954[Submit][Statu ...
- bzoj 2245 [SDOI2011]工作安排(最小费用最大流)
2245: [SDOI2011]工作安排 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1197 Solved: 580[Submit][Statu ...
随机推荐
- 洛谷 P2728 纺车的轮子 Spinning Wheels
P2728 纺车的轮子 Spinning Wheels 题目背景 一架纺车有五个纺轮(也就是五个同心圆),这五个不透明的轮子边缘上都有一些缺口.这些缺口必须被迅速而准确地排列好.每个轮子都有一个起始标 ...
- Spring Boot 配置Oracle数据库
1.添加oralce 依赖包,仓库没有则通过maven装载到本地仓库: 2.application.properties 中添加配置,特别是第一个配置项要严重注意! spring.jpa.databa ...
- javascript面向对象之Javascript 继承
转自原文javascript面向对象之Javascript 继承 在JavaScript中实现继承可以有多种方法,下面说两种常见的. 一,call 继承 先定义一个“人”类 //人类 Person=f ...
- [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 ...
- Nova和Heat中的servergroup
如今nova能够通过命令创建一个server group,在server group中的vm能够指定一些policy. 这些policy包含affinity和anti-affinity.affinit ...
- iOS模仿微信的那个视频眼睛动画
咳咳,费死老劲把这个动画搞出来了. 欢迎批评指正 github URL: https://git.oschina.net/momochao/WeChatEyeDemo
- linux中udev简单的用法【转】
本文转载自:http://blog.csdn.net/qq_29729577/article/details/50825134 udev是Linux提供的一种在用户态管理设备的一种机制,udev的详细 ...
- bzoj4247: 挂饰(背包)
4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...
- [APIO 2010] 巡逻
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1912 [算法] 树的直径 [代码] #include<bits/stdc++. ...
- 南海区行政审批管理系统接口规范v0.3(规划) 2.业务申报API 2.1.businessApply【业务申报】
{"v_interface":"2015987654327","c_project":"NH09A102"," ...