[AHOI2014/JSOI2014]支线剧情

有n个剧情点,对于第i个剧情点有ki个分支,分别通往tij剧情点,耗费时间为bij。从1号点开始,可以从任何节点返回1号点,要遍历所有的边的最少耗费时间为多少

上下界网络流板子题,每一条边的下界为1,除了起点外每一个点都可以是终点,所以建第n+1个点为汇点,这样就是一个有源有汇的上下界网络流,由汇点向源点建一条容量为inf的边。这个题没有上界,所以一定可以保证有可行流。

初始每条边都默认flow为1,先加入答案,然后建立平衡网络,跑出可行流加入答案即可。

//remember to delete freopen
#include <bits/stdc++.h>
using namespace std;//faster_reader
inline int read ()
{int f = 1, a = 0;char c = getchar ();while (c < '0' || c > '9'){if (c == '-') f = -1;c = getchar ();}while (c >= '0' && c <= '9'){a = a * 10 + c - '0';c = getchar ();}return f * a;
}const int N = 3100, M = 100010;
const int inf = 1e9 + 7;
long long ans = 0;
int head[N], now[N], num = -1;
int in[N], out[N], dis[N];
bool vis[N];
int s, t, n;struct edge
{int nxt, to, flow, pri;
};
edge e[M];void addEdge(int x, int y, int z, int w)
{e[++ num].nxt = head[x];head[x] = num;e[num].to = y;e[num].flow = z;e[num].pri = w;
}bool spfa()
{for (int i = 0; i <= n + 2; i ++)dis[i] = inf;dis[s] = 0;queue <int> q;q.push(s);while (!q.empty()){int x = q.front(); q.pop();for (int i = head[x]; i != -1; i = e[i].nxt){int to = e[i].to;if (dis[to] > dis[x] + e[i].pri && e[i].flow > 0){dis[to] = dis[x] + e[i].pri;q.push(to);}}}if (dis[t] != inf) return true;return false;
}int dfs(int x, int flow)
{if (vis[x]) return 0;vis[x] = 1;if (x == t)return flow;for (int i = now[x]; i != -1; i = e[i].nxt){now[x] = i;int to = e[i].to;if (dis[to] == dis[x] + e[i].pri && e[i].flow > 0){int val = dfs(to, min(flow, e[i].flow));if (val > 0){e[i].flow -= val;e[i ^ 1].flow += val;ans += val * e[i].pri;return val;}}}return 0;
}void dinic(int x, int y)
{s = x; t = y;while (spfa()){for (int i = 0; i <= n + 2; i ++){now[i] = head[i];vis[i] = 0;}int val;while (val = dfs (s, inf)){if (val == 0)break;}}
}int main()
{//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);n = read();memset (head, -1, sizeof (head));for (int i = 1; i <= n; i ++){int k = read();out[i] = k;for (int j = 1; j <= k; j ++){int tt, bb;tt = read(); bb = read();in[tt] ++;ans += bb;addEdge(i, tt, inf, bb);addEdge(tt, i, 0, -bb);}if (i > 1){addEdge(i, n + 1, inf, 0);addEdge(n + 1, i, 0, 0);}}addEdge(n + 1, 1, inf, 0);addEdge(1, n + 1, 0, 0);for (int i = 1; i <= n; i ++){if (in[i] > out[i]){addEdge (0, i, in[i] - out[i], 0);addEdge (i, 0, 0, 0);}if (in[i] < out[i]){addEdge (i, n + 2, out[i] - in[i], 0);addEdge (n + 2, i, 0, 0);}}s = 0; t = n + 2;dinic(0, n + 2);cout << ans;return 0;
}

[AHOI2014/JSOI2014]支线剧情相关推荐

  1. 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)

    题目链接 题目大意: 解题思路: 有源汇上下界最小费用可行流模板题目来着 先建出一个有源汇上下界可行流的图,然后注意建图的时候要把每条边的下界的费用提前加到ans里面 然后再对图跑费用流,就是补齐费用 ...

  2. 洛谷 - P4043 [AHOI2014/JSOI2014]支线剧情(最小费用可行流)

    题目链接:点击查看 题目大意:给出一张 n 个点的有向图,每条边都有边权,现在要求将每条边至少遍历一遍,问最小的边权为多少 题目分析:建图时将每条边都设置流量为 [ 1 , inf ] ,就变成最小费 ...

  3. P4043 [AHOI2014/JSOI2014]支线剧情(有源汇上下界最小费用可行流)

    传送门 约束每个点至少要经过一次,因此是上下界网络流. 每经过边都需要相应的边权,且要求耗费边权之和最小,因此是最小费用流. 存在多个终点,需要建立汇点 ttt ,因此是有源汇网络流. 即:有源汇上下 ...

  4. P4043 [AHOI2014/JSOI2014] 上下界最小费用流

    题意 传送门 P4043 [AHOI2014/JSOI2014]支线剧情 题解 游戏剧情构成一个 DAG,一次游戏花费的时间等于所走剧情路线花费的时间和.那么问题转化为边容量有上下界限制的最小费用流问 ...

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

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

  6. 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)

    什么是有下界的最小费用可行流? 平时来讲都是最小费用最大流,也就是在满流的前提条件下费用尽可能的少,而最小费用可行流一般不要求满流,但是每条边都有最小流量要求(比如经过边e(u,v)的流量不能少于4等 ...

  7. 【bzoj3876】【AHOI2014】【支线剧情】【有上下界的费用流】

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

  8. [BZOJ3876][AHOI2014]支线剧情-有下界的最小费用流

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

  9. BZOJ3876支线剧情

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 684 Solved: 417 Description [故事 ...

最新文章

  1. postfilter中文什么意思_Filterpost请求中文字符编码的过滤器 --学习笔记
  2. 【.Net MF网络开发板研究-01】IP地址设定及简单web演示
  3. CC2530的串口实验
  4. GitHub标星14k:超详细的人工智能专家路线图
  5. 【转】Android子线程真的不能更新UI么
  6. Nginx解决跨域问题的具体实现
  7. php开发环境 ubuntu,Ubuntu配置PHP开发环境
  8. OJ1061: 顺序输出各位数字(C语言)(谈程序优化问题及pow函数耗时问题)
  9. linux anaconda搜索路径,Anaconda安装及虚拟环境搭建教程(linux)
  10. 运算除法的计算机函数,2、Python基础--除法、常用数学函数(示例代码)
  11. python编程狮app_Python编程狮官方app下载_Python编程狮安卓app下载 v1.0.8 - 创意手游...
  12. 网络营销的关键你知道多少
  13. WinRAR 4.01 简体中文版 [0530]
  14. Kaldi在线搭建语音识别系统-李健
  15. subst ( 将任意目录挂载成虚拟磁碟机 )
  16. unity中eulerAngles和rotation的区别
  17. 用python3制作视频字幕,生成双英文双语字幕txt和srt文件使用百度和有道翻译自封装翻译接口,可以秒杀付费工具,字幕脚本为qiweb3远程 2022年5月29日
  18. Cannot commit, transaction is already closed
  19. 电商交易规律、RFM分类
  20. PostgreSQL 修改用户密码

热门文章

  1. 【Unity3D与23种设计模式】模板方法模式(Template Method)
  2. ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
  3. 一款WP小游戏代码分享
  4. Vue使用jsPdf将页面导出成pdf文件
  5. 安装开源项目 MultiType (基于 RecyclerView)出现的各种问题 -- 自己的第一篇博客...
  6. 基于visual graph开发实时线损管理系统
  7. SQL注入攻击再度肆虐殃及大量网站
  8. nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪
  9. extern 定义_Essential Cython - 2.7 - 定义并使用模板函数
  10. ZYNQ7000-GPIO EMIO中断实验 程序烧写后自动进一次中断的怪现象