点此看题面

大致题意: 有一张\(DAG\),经过每条边有一定时间,从\(1\)号点出发,随时可以返回\(1\)号点,求经过所有边的最短时间。

无源汇有上下界网络流

这是无源汇有上下界网络流的板子题。

可以先去看看这道题学习一下无源汇有上下界可行流的基本知识:【LOJ115】无源汇有上下界可行流

我们对于题目中的每条边,在网络流图中连容量下界为\(1\)、容量上界为\(INF\)、代价为经过其时间的边。

对于除\(1\)号点外的每个点,在网络流图中将其向\(1\)连容量下界为\(0\)、上界为\(INF\)、代价为\(0\)的边。

然后,我们按照上面这题的套路处理一下建好网络流图。

接下来我们可以发现,这就是要求最小费用可行流。

那就把可行流中原本的最大流改成最小费用最大流即可。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 300
#define K 5000
#define INF 1e9
using namespace std;
int n;
template<int PS,int ES> class NetFlow//网络流
{
private:
#define add(x,y,f,c) (addE(x,y,f,c),addE(y,x,0,-c))
#define addE(x,y,f,c) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y,e[ee].F=f,e[ee].C=c)
#define El(x) ((((x)-1)^1)+1)
int Ct,S,T,ee,p[PS+5],lnk[PS+5],lst[PS+5],F[PS+5],C[PS+5],Iq[PS+5];queue<int> q;
struct edge {int to,nxt,F,C;}e[2*ES+5];
I bool SPFA()//SPFA找增广路
{
RI i,k;for(i=1;i<=n+2;++i) F[i]=C[i]=INF;C[S]=0,q.push(S),Iq[S]=1;
W(!q.empty())
{
for(Iq[k=q.front()]=0,q.pop(),i=lnk[k];i;i=e[i].nxt) e[i].F&&C[k]+e[i].C<C[e[i].to]&&
(
F[e[i].to]=min(F[k],e[i].F),C[e[i].to]=C[k]+e[i].C,lst[e[i].to]=i,
!Iq[e[i].to]&&(q.push(e[i].to),Iq[e[i].to]=1)
);
}return F[T]!=INF;
}
public:
I void Add(CI x,CI y,CI Mn,CI Mx,CI c) {add(x,y,Mx-Mn,c),p[x]-=Mn,p[y]+=Mn,Ct+=Mn*c;}//建边
I void Solve()
{
RI x;S=n+1,T=n+2;for(RI i=1;i<=n;++i) p[i]>0&&add(S,i,p[i],0),p[i]<0&&add(i,T,-p[i],0);//建边使其满足流量平衡
W(SPFA()) {Ct+=F[T]*C[T],x=T;W(x^S) e[lst[x]].F-=F[T],e[El(lst[x])].F+=F[T],x=e[El(lst[x])].to;}//跑最小费用最大流
printf("%d",Ct);//输出答案
}
};NetFlow<N+2,2*N+K> Fl;
int main()
{
RI i,x,y,z;for(scanf("%d",&n),i=1;i<=n;++i)
for(scanf("%d",&x);x;--x) scanf("%d%d",&y,&z),Fl.Add(i,y,1,INF,z);//对于边建边
for(i=2;i<=n;++i) Fl.Add(i,1,0,INF,0);return Fl.Solve(),0;//对于点建边
}

【BZOJ3876】[AHOI2014&JSOI2014] 支线剧情(无源汇有上下界网络流)的更多相关文章

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

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

  2. BZOJ3876 [Ahoi2014&Jsoi2014]支线剧情 【有上下界费用流】

    题目 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费最少 ...

  3. BZOJ3876[Ahoi2014&Jsoi2014]支线剧情——有上下界的最小费用最大流

    题目描述 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费 ...

  4. bzoj3876: [Ahoi2014&Jsoi2014]支线剧情

    题意:给一幅图,从1开始,每条边有边权最少走一遍,可以在任意点退出,问最小花费 题解:上下界费用流,每个边都流一遍,然后为了保证流量平衡,新建源点汇点,跑费用流把流量平衡 /************* ...

  5. bzoj3876: [Ahoi2014&Jsoi2014]支线剧情(上下界费用流)

    传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了 ...

  6. Reactor Cooling(无源汇有上下界网络流)

    194. Reactor Cooling time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard o ...

  7. HDU 4940 Destroy Transportation system(无源汇有上下界最大流)

    看不懂题解以及别人说的集合最多只有一个点..... 然后试了下题解的方法http://blog.sina.com.cn/s/blog_6bddecdc0102uzka.html 首先是无源汇有上下界最 ...

  8. SGU 194. Reactor Cooling(无源汇有上下界的网络流)

    时间限制:0.5s 空间限制:6M 题意: 显然就是求一个无源汇有上下界的网络流的可行流的问题 Solution: 没什么好说的,直接判定可行流,输出就好了 code /* 无汇源有上下界的网络流 * ...

  9. hdu 4940 无源汇有上下界最大流

    /* <img src="http://img.blog.csdn.net/20140823174212937?watermark/2/text/aHR0cDovL2Jsb2cuY3N ...

随机推荐

  1. Linux学习笔记-第19天 结束了。突然感觉配置一个服务好简单的样子

    课程结束了,这本书又过了一遍,感觉学习到了不少的新知识.虽然整个过程老师讲的有点仓促,但回头想想身处于这个知识大爆炸的时代,学习不单要追求知识面宽广,更需要注重学习的效率,某种角度来讲,这也是一种鞭策 ...

  2. MQ的幂等性和解决方案

    1.幂等性 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.通俗的讲就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错:类似于数据库中的乐 ...

  3. Android常用adb命令总结(一)

    ADB是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备. ADB是一个客户端-服务器端程序,其中客户端是你用来操作的电脑,服务器端是an ...

  4. IT兄弟连 Java语法教程 Java语法基础 经典面试题

    1.Java语言中有几种基本类型?分别是什么?请详细说明每种类型的范围以及所占的空间大小? Java语言中有8中基本类型,分别是代表整形的byte.short.int和long,代表浮点型的float ...

  5. 【shell脚本】自动磁盘分区,格式化,挂载===autoMount.sh

    #!/bin/bash # 自动对磁盘分区.格式化.挂载 # 对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk # n(新建分区),p(创建主分区), ...

  6. 基于appium的模拟单点或多点触屏操作

    一.单点触控 TouchAction类:将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受该链条后,解析各个动作,逐个执行,TouchAction类提供了以下几种方法: 短按:pres ...

  7. json数据格式与字典数据类型之间的相互转换

    import json class HandleJson: ''' 定义一个json格式数据处理类 ''' @staticmethod def loads_data(data): ''' 将json数 ...

  8. java循环定时器@Scheduled的使用

    @Scheduled 注解 用于定时循环执行任务 例如: @Scheduled(cron="0 */10 * * * ?") 表示每隔十分钟执行一次 每隔5秒执行一次:" ...

  9. 资源推荐:PPT快闪资源合集附配套字体下载

    样例ppt下载 搜索公众号“拒收”或扫码关注公众号 回复关键字“快闪ppt”获取全部福利 本公众号只出精品,拒收劣质 或者点击菜单链接获取获取全部资源

  10. SpringBoot 和Vue前后端分离入门教程(附源码)

    作者:梁小生0101 juejin.im/post/5c622fb5e51d457f9f2c2381 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计 ...