题目链接:支线剧情

  这道题就是一道裸裸的上下界网络流……只不过这道题边带了权,那么建出图之后跑费用流即可。

  首先需要新建超级源\(S\)和超级汇\(T\)。对于这道题,对于一条边\((u,v,z)\),我们从\(S\)向\(v\)连一条容量为\(1\),费用为\(z\)的边,保证下界;从\(u\)向\(T\)连一条容量为\(1\),费用为\(0\)的边,也是用来保证下界的。由于没有上界,所以直接从\(u\)向\(v\)连一条容量为\(INF\),费用为\(z\)的边即可。

  注意这道题可以在任意一个点重新开始,所以等于除\(1\)号点之外所有的点都可能成为汇点,所以连边的时候需要注意一下。也就是说,除了\(1\)号点之外的所有点,都要向\(1\)连一条容量为\(INF\),费用为\(0\)的边来保证流量平衡。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 310
#define maxm 50010
#define INF (1<<29) using namespace std;
typedef long long llg; int n,S,T,c[maxm],f[maxm],ans;
int head[maxn],next[maxm],to[maxm],tt=1;
int d[maxn],dep[maxn],fr[maxn];
bool w[maxn]; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void link(int x,int y,int z,int o){
to[++tt]=y;next[tt]=head[x];head[x]=tt;
to[++tt]=x;next[tt]=head[y];head[y]=tt;
c[tt-1]=z; f[tt-1]=o; f[tt]=-o;
} bool spfa(){
for(int i=1;i<=T;i++) dep[i]=INF;
int ld=0,rd=0; dep[d[rd++]=S]=0;
while(ld!=rd){
int u=d[ld++]; w[u]=0; if(ld==maxn) ld=0;
for(int i=head[u],v;v=to[i],i;i=next[i])
if(c[i] && dep[v]>dep[u]+f[i]){
dep[v]=dep[u]+f[i]; fr[v]=i;
if(!w[v]){
w[v]=1;
if(dep[v]<=dep[d[ld]]) ld--,ld+=maxn,ld%=maxn,d[ld]=v;
else d[rd++]=v,rd%=maxn;
}
}
}
return dep[T]!=INF;
} int get(){
int now=INF,ans=0;
for(int u=T;u!=S;u=to[fr[u]^1]) now=min(now,c[fr[u]]),ans+=f[fr[u]];
for(int u=T;u!=S;u=to[fr[u]^1]) c[fr[u]]-=now,c[fr[u]^1]+=now;
return now*ans;
} int main(){
File("a");
n=getint(); S=n+1,T=n+2;
for(int i=1,x,u,z;i<=n;i++){
x=getint();
if(i!=1) link(i,1,INF,0);
if(x) link(i,T,x,0);
while(x--){
u=getint(); z=getint();
link(i,u,INF,z),link(S,u,1,z);
}
}
while(spfa()) ans+=get();
printf("%d",ans);
return 0;
}

BZOJ 3876 【AHOI2014】 支线剧情的更多相关文章

  1. bzoj 3876 [Ahoi2014]支线剧情(有上下界的最小费用流)

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

  2. BZOJ 3876: [Ahoi2014]支线剧情 [上下界费用流]

    3876: [Ahoi2014]支线剧情 题意:每次只能从1开始,每条边至少经过一次,有边权,求最小花费 裸上下界费用流...每条边下界为1就行了 注意要加上下界*边权 #include <io ...

  3. BZOJ 3876: [Ahoi2014]支线剧情 带下界的费用流

    3876: [Ahoi2014]支线剧情 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3876 Description [故事背景] 宅 ...

  4. 【有源汇上下界费用流】BZOJ 3876 [Ahoi2014]支线剧情

    题目链接: http://www.lydsy.com:808/JudgeOnline/problem.php?id=3876 题目大意: 给定一张拓扑图(有向无环图),每条边有边权,每次只能从第一个点 ...

  5. bzoj 3876: [Ahoi2014]支线剧情

    就是加一个1的下界就好了. #include<bits/stdc++.h> #define N 100005 #define LL long long #define inf 0x3f3f ...

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

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

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

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

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

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

  9. 【BZOJ3876】 [Ahoi2014]支线剧情

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

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

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

随机推荐

  1. [Android Tips] 31.如何将第三库引入的 Permission 删除掉

    Just declare the incriminated permission in your (main) Manifest with the tools:node="remove&qu ...

  2. C# tostring 格式化输出

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  3. 向Docx4j生成的word文档中添加布局--第二部分

    原文标题:Adding layout to your Docx4j-generated word documents, part 2 原文链接:http://blog.iprofs.nl/2012/1 ...

  4. 第二次作业(WordCount)重制版

    Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master 基本功能: 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式 ...

  5. UVA 624 ---CD 01背包路径输出

    DescriptionCD You have a long drive by car ahead. You have a tape recorder, but unfortunately your b ...

  6. [3D]1.绘制三角形

    作为一个.Net程序员学习3D开发好尴尬啊,因为不论是OpenGL还是Direct3D都是用C/C++开发的比较多.虽然有计划使用C++进行开发,但是平时还是C#使用的多.很少用C++做东西,如果仅仅 ...

  7. mysql查询表和字段的注释

    1,新建表以及添加表和字段的注释.   create table t_user(        ID INT(19) primary key auto_increment  comment '主键', ...

  8. viewport 编写 iPhone Friendly 的 Web 应用程序

    在了解到iPhone的一些常见布局法后,我们就可以开始着手编写一个真正能在iPhone上跑的页面了.小声说一句,之前我说要布局讨论完了,要进入交互逻辑开发,后来细心一想发现不行,有些东西不讲的话将会对 ...

  9. 20155316 2016-2017-2 《Java程序设计》第8周学习总结

    教材学习内容总结 课堂部分要点 数据结构与算法 与 Java相结合 collection API:数据结构 crypt:密码学 操作系统 考试部分重点 实验楼:Linux第四节 教材:第6章.第14章 ...

  10. python 封装时间常用操作方法-time,datetime

    封装脚本: #encoding=utf-8import timefrom datetime import timedelta,date def date_time_chinese():    prin ...