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

时间:2021-09-16 03:08:39

题意:

  给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和

分析:

  这道题乍一看,可能会想到什么最小链覆盖之类的,但是仔细一想,会发现不行,一是因为每条边都会有贡献,而不是每条链,二是因为边有特定的边权,所以这道题只能用建图复杂一些的网络流来解决。

  其实也挺简单的。都不用建超级源点,直接从1号点当源点就行,每条边费用为边权,容量下界为1,上界无穷大。

  然后建图跑最小费用可行流就可以了。

代码:

 #include<bits/stdc++.h>
using namespace std;int S,T,tot=;
const int N=,M=,inf=0x3f3f3f3f;
struct node{int y,f,c,nxt;}e[M];int c=,t[N];
int h[N],q[M],d[N],n,m,s,pre[N];bool vis[N];
void add(int x,int y,int z,int w){
e[++c]=(node){y,z,w,h[x]};h[x]=c;
e[++c]=(node){x,,-w,h[y]};h[y]=c;
} bool spfa(){
for(int i=;i<=T;i++) d[i]=inf;
int l=,r=;q[++r]=S;vis[S]=;d[S]=;
while(l<=r){
int x=q[l++];vis[x]=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]>d[x]+e[i].c&&e[i].f){
d[y]=d[x]+e[i].c;pre[y]=i;
if(!vis[y]) q[++r]=y,vis[y]=;}
} return (d[T]!=inf);
} void aug(){ int x=inf;
for(int i=pre[T];i;i=pre[e[i^].y])
x=min(x,e[i].f);
for(int i=pre[T];i;i=pre[e[i^].y])
tot+=x*e[i].c,e[i].f-=x,e[i^].f+=x;
} int main(){
scanf("%d",&n);S=,T=n+;
for(int i=,k,y,v;i<=n;i++){
scanf("%d",&k);while(k--)
scanf("%d%d",&y,&v),
add(i,y,inf,v),t[y]++,t[i]--,tot+=v;
} for(int i=;i<=n;i++)
if(t[i]>) add(S,i,t[i],);
else if(t[i]<) add(i,T,-t[i],);
while(spfa()) aug();
printf("%d\n",tot);return ;
}

有源汇有上下界最小费用可行流

BZOJ 3876 支线剧情 有源汇有上下界最小费用可行流的更多相关文章

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

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

  2. &lbrack;Ahoi2014&rsqb;支线剧情&lbrack;无源汇有下界最小费用可行流&rsqb;

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

  3. loj &num;117&period; 有源汇有上下界最小流

    题目链接 有源汇有上下界最小流,->上下界网络流 注意细节,边数组也要算上后加到SS,TT边. #include<cstdio> #include<algorithm> ...

  4. LOJ&period;117&period;&lbrack;模板&rsqb;有源汇有上下界最小流&lpar;Dinic&rpar;

    题目链接 有源汇有上下界最小流 Sol1. 首先和无源汇网络流一样建图,求SS->TT最大流: 然后连边(T->S,[0,INF]),再求一遍SS->TT最大流,答案为新添加边的流量 ...

  5. Flow construction SGU - 176 有源汇有上下界最小流 二分法和回流法

    /** 题目:Flow construction SGU - 176 链接:https://vjudge.net/problem/SGU-176 题意: 有源汇有上下界的最小流. 给定n个点,m个管道 ...

  6. sgu 176 Flow construction(有源汇的上下界最小流)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11025 [模型] 有源汇点的上下界最小流.即既满足上下界又满足 ...

  7. BZOJ2055 80人环游世界 网络流 费用流 有源汇有上下界的费用流

    https://darkbzoj.cf/problem/2055 https://blog.csdn.net/Clove_unique/article/details/54864211 ←对有上下界费 ...

  8. &lbrack;BZOJ2055&rsqb;80人环游世界 有上下界最小费用最大流

    2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Description     想必大家都看过成龙大哥的<80天环游世界>,里面 ...

  9. bzoj 2502 清理雪道(有源汇的上下界最小流)

    [题意] 有一个DAG,要求每条边必须经过一次,求最少经过次数. [思路] 有上下界的最小流.  边的下界为1,上界为无穷.构造可行流模型,先不加ts边跑一遍最大流,然后加上t->s的inf边跑 ...

随机推荐

  1. 7&lowbar;nodejs angularjs

    webstrom使用: ctrl+b/点击,代码导航,自动跳转到定义 ctrl+n跳转指定类 ctrl+d复制当前行ctrl+enter另起一行ctrl+y删除当前行 ctrl+alt/shift+b ...

  2. 浅谈Chrome V8引擎中的垃圾回收机制

    垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存.垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带 ...

  3. 移植busybox-1&period;21&period;1

    busybox官网:www.busybox.net 1.解压 # tar jxvf busybox-1.21.1.tar.bz2 2.配置 # cd busybox-1.21.1 # make men ...

  4. C语言深度剖析--volatile(转载)

    volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等.遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进 ...

  5. Android框架式编程之BufferKnife

    配置 compile 'com.jakewharton:butterknife:(insert latest version)' annotationProcessor 'com.jakewharto ...

  6. WAMPServer多站点配置方法

    WAMPServer多站点配置方法:1.在C:\wamp\www 新建文件夹test01,在里面新建index.php,内容为 "Hello Test01". 2.C:\wamp\ ...

  7. Qt Creator 整合 python 解释器教程

    目录 1. 前言 2.前提条件 3.步骤 3.1 新建 python文件 3.2 编写 python 代码 3.3 配置 python 解释器 3.4 执行 python file 1. 前言 Pyt ...

  8. 设置 Confluence 6 外部索引站点

    Confluence 并不能比较容易的对外部站点进行搜索,这个是因为 Confluence 使用的是 Lucene 内部查找,但是你还是有下面 2 个可选的方案: 嵌入外部页面到 Confluence ...

  9. python之封装与扩展性

    1.封装与扩展性 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用的代码:而外部使用者只知道一个接口(函数),只要接口(函数)名,参数不变,使用者的代码永远无需改变.这就提供了一 ...

  10. IdentityServer4-介绍

    一.总体介绍 大多数现代应用或多或少是这样的: 通常,每个层(前端.中间层和后端)都必须保护资源并实现身份验证和/或授权——通常针对相同的用户存储. 将这些基本的安全功能外包给安全令牌服务,可以防止在 ...