题目:

【故事背景】
宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往
都有很多的支线剧情,现在JYY想花费最少的时间看完所有的支线剧情。
【问题描述】
JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据JYY的不同的选择,而经过不同的支线剧情,前往Ki种不同的新的剧情点。当然如果为0,则说明i号剧情点是游戏的一个结局了。
JYY观看一个支线剧情需要一定的时间。JYY一开始处在1号剧情点,也就是游戏的开始。显然任何一个剧情点都是从1号剧情点可达的。此外,随着游戏的进行,剧情是不可逆的。所以游戏保证从任意剧情点出发,都不能再回到这个剧情点。由于JYY过度使用修改器,导致游戏的“存档”和“读档”功能损坏了,
所以JYY要想回到之前的剧情点,唯一的方法就是退出当前游戏,并开始新的游戏,也就是回到1号剧情点。JYY可以在任何时刻退出游戏并重新开始。不断开始新的游戏重复观看已经看过的剧情是很痛苦,JYY希望花费最少的时间,看完所有不同的支线剧情。

Input

输入一行包含一个正整数N。
接下来N行,第i行为i号剧情点的信息;
第一个整数为,接下来个整数对,Bij和Tij,表示从剧情点i可以前往剧
情点,并且观看这段支线剧情需要花费的时间。
 

Output

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

Sample Input

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

Sample Output

24

HINT

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

题解:

这道题很NB····

表面看起来如果直接按题意建图的话,会是一道有下界费用流的题···md我不会···

但可以转成普通费用流的题····这里引用PoPoQQQ题解····%%%%%%

对于每一条边权为z的边x->y:

从S到y连一条费用为z,流量为1的边 代表这条边至少走一次

从x到y连一条费用为z,流量为INF的边 代表这条边除了至少走的一次之外还可以随便走

对于每个点x:

从x到T连一条费用为0,流量为x的出度的边

从x到1连一条费用为0,流量为INF的边,代替原图上的源和汇

不得不说想到这样建图实在是太巧妙了·····

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<ctime>
  6. #include<cctype>
  7. #include<cstring>
  8. #include<string>
  9. #include<algorithm>
  10. #include<queue>
  11. using namespace std;
  12. const int inf=1e+;
  13. const int N=;
  14. const int M=;
  15. queue<int>que;
  16. int tot=,first[N],go[M],next[M],rest[M],cost[M];
  17. int chu[N],ans=,dis[N],src,des,n;
  18. bool insta[N],visit[N];
  19. int R()
  20. {
  21. char c;
  22. int f=;
  23. for(c=getchar();c<''||c>'';c=getchar());
  24. for(;c>=''&&c<='';c=getchar())
  25. f=(f<<)+(f<<)+c-'';
  26. return f;
  27. }
  28. inline void comb(int a,int b,int c,int d)
  29. {
  30. next[++tot]=first[a],first[a]=tot,go[tot]=b,rest[tot]=c,cost[tot]=d;
  31. next[++tot]=first[b],first[b]=tot,go[tot]=a,rest[tot]=,cost[tot]=-d;
  32. }
  33. inline bool SPFA()
  34. {
  35. for(int i=src;i<=des;i++) visit[i]=false,dis[i]=inf;
  36. que.push(src);
  37. dis[src]=;
  38. while(!que.empty())
  39. {
  40. int u=que.front();
  41. que.pop();
  42. insta[u]=false;
  43. for(int e=first[u];e;e=next[e])
  44. {
  45. int v=go[e];
  46. if((dis[v]>dis[u]+cost[e])&&rest[e])
  47. {
  48. dis[v]=dis[u]+cost[e];
  49. if(!insta[v])
  50. {
  51. que.push(v);
  52. insta[v]=true;
  53. }
  54. }
  55. }
  56. }
  57. return dis[des]!=inf;
  58. }
  59. inline int dinic(int u,int flow)
  60. {
  61. if(u==des)
  62. {
  63. ans+=flow*dis[des];
  64. return flow;
  65. }
  66. visit[u]=true;
  67. int res=,delta,v;
  68. for(int e=first[u];e;e=next[e])
  69. {
  70. if(dis[v=go[e]]==dis[u]+cost[e]&&!visit[v]&&rest[e])
  71. {
  72. delta=dinic(v,min(rest[e],flow-res));
  73. if(delta)
  74. {
  75. rest[e]-=delta;
  76. rest[e^]+=delta;
  77. res+=delta;
  78. if(res==flow) break;
  79. }
  80. }
  81. }
  82. return res;
  83. }
  84. inline void maxflow()
  85. {
  86. while(SPFA())
  87. dinic(src,inf);
  88. }
  89. int main()
  90. {
  91. //freopen("a.in","r",stdin);
  92. n=R();
  93. int t,a,b;
  94. src=,des=n+;
  95. for(int i=;i<=n;i++)
  96. {
  97. t=R();
  98. for(int j=;j<=t;j++)
  99. {
  100. a=R(),b=R();
  101. comb(src,a,,b);
  102. comb(i,a,inf,b);
  103. }
  104. chu[i]=t;
  105. }
  106. for(int i=;i<=n;i++)
  107. {
  108. comb(i,des,chu[i],);
  109. if(i!=)
  110. comb(i,,inf,);
  111. }
  112. maxflow();
  113. cout<<ans<<endl;
  114. return ;
  115. }

刷题总结——支线剧情(bzoj3876费用流)的更多相关文章

  1. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  2. 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)

    传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...

  3. 【Codevs1237&网络流24题餐巾计划】(费用流)

    题意:一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同. 假设第 i 天需要 ri块餐巾(i=1,2,…,N).餐厅可以购买新的餐巾,每块餐巾的费用为 p 分: 或者把旧餐巾送到快洗部,洗一块需 ...

  4. BZOJ 3876 [AHOI/JSOI2014]支线剧情 (最小费用可行流)

    题面:洛谷传送门 BZOJ传送门 题目大意:给你一张有向无环图,边有边权,让我们用任意条从1号点开始的路径覆盖这张图,需要保证覆盖完成后图内所有边都被覆盖至少一次,求覆盖路径总长度的最小值 最小费用可 ...

  5. CF 277E Binary Tree on Plane (拆点 + 费用流) (KM也可做)

    题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉 ...

  6. [NOI2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

  7. 线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)

    题面 传送门 Sol 线性规划费用流解法用与求解未知数为非负数的问题 这道题可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我们强行给每个式子减去一个东西, ...

  8. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

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

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

随机推荐

  1. [windows]命令行关机或重启电脑

    1.关机:菜单--〉运行--〉输入:cmd--〉输入:shutdown -s -t 0 2.重启:菜单--〉运行--〉输入:cmd--〉输入:shutdown -r -t 0 (注:“-r”代表重启, ...

  2. Win10系统64位快速专业安装版 V2016年

    win10系统64位快速专业安装版 V2016年2月 系统下载:http://www.xitongma.com/ Ghost Win10 64位正式装机专业版2016 微软向Windows用户推送了w ...

  3. “流”的思维—Workflowy

    3.“流”的思维—Workflowy是我最喜欢的”流“的工具(WorkFlowy - Organize your brain.)我觉得,让发散性的思维更具实施性,必须分步操作,必须有先后,必须单线程. ...

  4. gitlab autuo devops

    [参考文章] Chengzi_comm的专栏 use gitlab ci docker run gitlab-runner gitlab-runner register 1. 在虚拟机或服务器运行gi ...

  5. java设计模式基础 - 解决某一类问题最行之有效的方法,框架是大的设计模式.

    一.单例模式(Singleton) 1.单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1>某 ...

  6. UVa-213-信息解码

    这题的话,我们只要理解题意,应该就不算很难. 我们可以开一个二维数组,用来存放对应的编码字符,第一个下表是length,第二个下标是value,这样一来,我们在读入数据的时候就进行处理,然后想要使用的 ...

  7. MySql的基操勿六

    2018/12/6 星期四 19:34:07 authot by dabaine 数据库注释; -- 这就是注释 /*.....*/ 这也是注释 创建库; create databse [if not ...

  8. (9)zabbix创建监控项item

    1. 创建监控项 点击配置(configuration)->主机(Hosts)->在你要配置的主机一栏上点击Items->点击create item.具体看截图,各个参数我都已经标注 ...

  9. laravel如何利用数据库的形式发送通知

    具体实现需要分几步: 1.修改驱动为database; 2.创建database的queue表 3.创建任务sendMessage 4.创建发送逻辑dispatch 5.启动队列 接下来我们进行实操: ...

  10. laravel中的scope作用域

    laravel中在模板中处理(属于不属于)的数据(增删改查),引入了scope来处理 也就是在模板定义方法中,加上前缀scope laravel中要求在定义的方法scope后面跟的字母要大写 后面那我 ...