支线剧情

【故事背景】

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

【问题描述】

JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据JYY的不同的选择,而经过不同的支线剧情,前往Ki种不同的新的剧情点。当然如果为0,则说明i号剧情点是游戏的一个结局了。

JYY观看一个支线剧情需要一定的时间。JYY一开始处在1号剧情点,也就是游戏的开始。显然任何一个剧情点都是从1号剧情点可达的。此外,随着游戏的进行,剧情是不可逆的。所以游戏保证从任意剧情点出发,都不能再回到这个剧情点。由于JYY过度使用修改器,导致游戏的“存档”和“读档”功能损坏了,

所以JYY要想回到之前的剧情点,唯一的方法就是退出当前游戏,并开始新的游戏,也就是回到1号剧情点。JYY可以在任何时刻退出游戏并重新开始。不断开始新的游戏重复观看已经看过的剧情是很痛苦,JYY希望花费最少的时间,看完所有不同的支线剧情。

【输入格式】

输入一行包含一个正整数N。

接下来N行,第i行为i号剧情点的信息;

第一个整数为,接下来个整数对,Bij和Tij,表示从剧情点i可以前往剧

情点,并且观看这段支线剧情需要花费的时间。

【输出格式】

输出一行包含一个整数,表示JYY看完所有支线剧情所需要的最少时间。

【样例输入】

6
2 2 1 3 2
2 4 3 5 4
2 5 5 6 6
0
0
0

【样例输出】

24

【样例解释】

JYY需要重新开始3次游戏,加上一开始的一次游戏,4次游戏的进程是

1->2->4,1->2->5,1->3->5和1->3->6。

对于100%的数据满足N<=300,0<=Ki<=50,1<=Tij<=300,Sigma(Ki)<=5000


题解:

题意就是要求走完所有边所需的最小时间(费用)

相当于有上下界无源汇可行最小费用流

那么就把题目中给定的边下界设为 1

重新开始就从每一个点连向点 1 就好了

具体见图可看代码

对于超级源与超级汇的连边也一起连在里面了

 #include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e3 + ;
const int maxm = 3e4 + ;
const int inf = 1e9 + ;
int n;
int s, t, nors, nort, sups, supt;
int du[maxn];
int len;
int nex[maxm], fir[maxn], ver[maxm], con[maxm], val[maxm];
bool vis[maxn];
int que[maxm << ], dis[maxn];
int ans;
inline void Scan(int &x)
{
char c;
bool o = false;
while(!isdigit(c = getchar())) o = (c != '-') ? o : true;
x = c - '';
while(isdigit(c = getchar())) x = x * + c - '';
if(o) x = -x;
}
inline void Add(int x, int y, int c, int w)
{
nex[++len] = fir[x];
fir[x] = len;
ver[len] = y;
con[len] = c;
val[len] = w;
}
inline void Ins(int x, int y, int c, int w)
{
Add(x, y, c, w);
Add(y, x, , -w);
}
inline void Sup(int x, int y, int l, int r, int w)
{
if(l) du[x] -= l, du[y] += l;
if(l != r) Ins(x, y, r - l, w);
}
inline bool Spfa()
{
int head = , tail = ;
for(int i = ; i <= supt; ++i)
dis[i] = inf, vis[i] = false;
que[tail] = s;
dis[s] = ;
vis[s] = true;
while(head < tail)
{
int u = que[++head];
for(int i = fir[u]; i; i = nex[i])
{
if(!con[i]) continue;
int v = ver[i];
if(dis[v] > dis[u] + val[i])
{
dis[v] = dis[u] + val[i];
if(!vis[v])
{
vis[v] = true;
que[++tail] = v;
}
}
}
vis[u] = false;
}
return dis[t] < inf;
}
int Dinic(int u, int f)
{
vis[u] = true;
if(u == t) return f;
int g = f;
for(int i = fir[u]; i; i = nex[i])
{
if(!con[i]) continue;
int v = ver[i];
if(vis[v] || dis[v] != dis[u] + val[i]) continue;
int h = Dinic(v, min(con[i], g));
if(h)
{
con[i] -= h;
con[i ^ ] += h;
g -= h;
ans += h * val[i];
if(!g) return f;
}
}
return f - g;
}
inline int Flow(int x, int y)
{
s = x, t = y, ans = ;
while(Spfa()) Dinic(s, inf);
return ans;
}
inline void Init()
{
len = ;
nors = n << | ;
nort = nors + ;
sups = nort + ;
supt = sups + ;
}
int main()
{
Scan(n);
int m, x, t;
Init();
for(int i = ; i <= n; ++i)
{
Scan(m);
Ins(i, supt, m, );
while(m--)
{
Scan(x), Scan(t);
Sup(i, x, , inf, t);
Ins(sups, x, , t);
}
if(i != ) Ins(i, , inf, );
}
printf("%d", Flow(sups, supt));
}

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

  1. BZOJ 3876 支线剧情 | 有下界费用流

    BZOJ 3876 支线剧情 | 有下界费用流 题意 这题题面搞得我看了半天没看懂--是这样的,原题中的"剧情"指的是边,"剧情点"指的才是点. 题面翻译过来大 ...

  2. BZOJ 3876 支线剧情(有上下界的无源汇最小费用可行流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1783  Solved: 1079 [Submit][St ...

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

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

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

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

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

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

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

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

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

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

  8. BZOJ 3876 【AHOI2014】 支线剧情

    题目链接:支线剧情 这道题就是一道裸裸的上下界网络流……只不过这道题边带了权,那么建出图之后跑费用流即可. 首先需要新建超级源\(S\)和超级汇\(T\).对于这道题,对于一条边\((u,v,z)\) ...

  9. 支线剧情(bzoj 3876)

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

随机推荐

  1. Linux入门-第八周

    1.用shell脚本实现自动登录机器 #!/usr/bin/expectset ip 192.168.2.192set user rootset password rootspawn ssh $use ...

  2. Zimber 8.8.12卸载后重新安装报错解决办法

    1.1  zimber故障处理步骤 1.1.1  现象描述 Running Post Installation Configuration: /opt/zimbra/bin/zmlocalconfig ...

  3. 调用python-nmap实现扫描局域网存活主机

    使用环境:Raspberry 3b+ +netifaces+python-nmap+nmap 调用netifaces自动获取ip地址: def get_gateways(): return netif ...

  4. 04vim的使用

    linux常用命令 workon 查看已经安装的虚拟环境 deactivate 退出虚拟环境 whoami 查看用户 sudo bash install.sh 添加权限 pwd 查看在那个路径下 cd ...

  5. 指向class的指针使用方法实例

    // pointer to classes example #include <iostream> using namespace std; class Rectangle { int w ...

  6. I2C总线协议图解(转载)

    转自:http://blog.csdn.net/w89436838/article/details/38660631 另外,https://blog.csdn.net/qq_38410730/arti ...

  7. A1009 Product of Polynomials (25)(25 分)

    A1009 Product of Polynomials (25)(25 分) This time, you are supposed to find A*B where A and B are tw ...

  8. DFS:POJ1088-滑雪(记忆化搜索)

    题目: 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 97666 Accepted: 37055 Description ...

  9. 洛谷 P3740 [HAOI2014]贴海报

    题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...

  10. Win7系统桌面便签怎么添加?

    参考:http://jingyan.baidu.com/article/ab69b270c207432ca7189f99.html Win7系统桌面便签怎么添加?有时候工作.学习忙起来就会忘记要办的事 ...