HDU-6437

题意:一天有n个小时,现在有m场电影,每场电影有一个愉悦值,有k个人,电影分2种类型A, B, 并且每一场电影只能一个人看, 一个人可以看无数次电影, 只要时间足够, 但是连续看同一种电影会减少愉悦值W点。现在要求所有人总的愉悦值加起来最大。

题解:

网络流建图,先把每个点拆成2个点, u 和 u‘ , 在u和u’中间连一条流量为1,费用为0的边, 现在我们规定 一个点的 复制点只能和本体链接, 只能由复制点往外流, 然后别的点流入只能留到本体。

也就是 假设 存在 u, v2个点, 这2个点之间可以存在边且为u->v  那么连线方式就为 u -> u' -> v -> v'。

因为每个电影看的人最多是1, 所以 u - > u' 的流量为1。

s -> s'的流量为k。

然后我们把s‘和所有的电影建边 流量为1, 花费为电影获得的愉悦值

然后把所有电影与t建边 流量为1,花费为0

然后我们把看完一场电影之后可以去看另一场电影的2个点建边,花费为下一次电影的愉悦值 - (是否为同一种类电影)* W。

由于是需要最大的愉悦值, 我们把花费取反, 然后跑费用流。 最后把答案取反。

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
  4. #define LL long long
  5. #define ULL unsigned LL
  6. #define fi first
  7. #define se second
  8. #define pb push_back
  9. #define lson l,m,rt<<1
  10. #define rson m+1,r,rt<<1|1
  11. #define max3(a,b,c) max(a,max(b,c))
  12. #define min3(a,b,c) min(a,min(b,c))
  13.  
  14. typedef pair<int,int> pll;
  15. const int INF = 0x3f3f3f3f;
  16. const LL mod = (int)1e9+;
  17. const int N = 1e5;
  18. const int M = ;
  19. int head[M], to[N], ct[N], w[N], nt[N];
  20. int d[M], vis[M];
  21. int pre[M], id[N];
  22. int n, m, s, t, tot;
  23.  
  24. void add(int u, int v, int val, int cost){
  25. to[tot] = v;
  26. ct[tot] = -cost;
  27. w[tot] = val;
  28. nt[tot] = head[u];
  29. head[u] = tot++;
  30.  
  31. to[tot] = u;
  32. ct[tot] = cost;
  33. w[tot] = ;
  34. nt[tot] = head[v];
  35. head[v] = tot++;
  36. }
  37. void init(){
  38. memset(head,-,sizeof(head));
  39. tot = ;
  40. }
  41. int spfa(){
  42. queue<int> q;
  43. memset(d, INF, sizeof(d));
  44. memset(vis, , sizeof(vis));
  45. memset(pre, -, sizeof(vis));
  46. d[s] = ;
  47. q.push(s);
  48. while(!q.empty()){
  49. int u = q.front(); q.pop();
  50. vis[u] = ;
  51. for(int i = head[u]; ~i; i = nt[i]){
  52. if(w[i] > && d[to[i]] > d[u] + ct[i]){
  53. d[to[i]] = d[u] + ct[i];
  54. pre[to[i]] = u;
  55. id[to[i]] = i;
  56. if(!vis[to[i]]){
  57. vis[to[i]] = ;
  58. q.push(to[i]);
  59. }
  60. }
  61. }
  62.  
  63. }
  64. return d[t] < INF;
  65. }
  66.  
  67. int MaxFlow(){
  68. int Mi = INF;
  69. int sum = ;
  70. while(spfa()){
  71. Mi = INF;
  72. for(int i = t; i != s; i = pre[i])
  73. Mi = min(Mi, w[id[i]]);
  74. for(int i = t; i != s; i = pre[i]){
  75. w[id[i]] -= Mi;
  76. w[id[i]^] += Mi;
  77. }
  78. sum += d[t];
  79. }
  80. return sum;
  81. }
  82. struct Node{
  83. int l, r, t, op;
  84. bool operator < (const Node & x) const {
  85. return l < x.l;
  86. }
  87. }A[N];
  88. int main(){
  89. int T, n, m, k, lost;
  90. scanf("%d", &T);
  91. while(T--){
  92. scanf("%d%d%d%d", &n, &m, &k, &lost);
  93. init();
  94. for(int i = ; i <= m; i++)
  95. scanf("%d%d%d%d", &A[i].l, &A[i].r, &A[i].t, &A[i].op);
  96. sort(A+, A++m);
  97. s = , t = * m+;
  98. for(int i = ; i <= m; i++){
  99. for(int j = i+; j <= m; j++){
  100. if(A[i].r <= A[j].l){
  101. add(m + i, j, , A[j].t - lost*(A[i].op == A[j].op));
  102. }
  103. }
  104. }
  105. add(s, * m + , k, );
  106. for(int i = ; i <= m; i++){
  107. add( * m + , i, , A[i].t);
  108. add(i, m + i, , );
  109. add(m + i, t, , );
  110. }
  111. printf("%d\n", -MaxFlow());
  112. }
  113. return ;
  114. }

HDU-6437 Videos的更多相关文章

  1. HDU 6437 Problem L.Videos (最大费用)【费用流】

    <题目链接> 题目大意: 一天有N个小时,有m个节目(每种节目都有类型),有k个人,连续看相同类型的节目会扣w快乐值.每一种节目有都一个播放区间[l,r].每个人同一时间只能看一个节目,看 ...

  2. HDU - 6437:Videos (裸的费用流)

    ...懒得说什么了 #include<bits/stdc++.h> using namespace std; ; <<;int To[maxn],Laxt[maxn],Next ...

  3. HDU - 6437 Problem L.Videos 2018 Multi-University Training Contest 10 (最小费用最大流)

    题意:M个影片,其属性有开始时间S,结束时间T,类型op和权值val.有K个人,每个人可以看若干个时间不相交的影片,其获得的收益是这个影片的权值val,但如果观看的影片相邻为相同的属性,那么收益要减少 ...

  4. HDU 6437 最(大) 小费用最大流

    Problem L.Videos Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  5. hdu 6437 /// 最小费用最大流 负花费 SPFA模板

    题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...

  6. 【杂题总汇】HDU多校赛第十场 Videos

    [HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  10. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. ElasticSearch6.x版本聚合分析整理

    ElasticSearch6.x版本聚合分析整理 ES将聚合分析主要分为如下4类 Bucket,分桶类型,类似SQL中的GROUP BY语法 Metric,指标分析类型,如计算最大值 , 最小值,平均 ...

  2. java中System.out.println()打印输出结果

    疑点:syso()是打印输出语句,打印的是什么? syso()不同情况下打印输出的结果不一样: 1. package com.briup; public class Syso { public sta ...

  3. Oracle_InstantClient 及PL/SQL Developer工具的安装

    一.下载 InstantClient 地址: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html i ...

  4. 使用 Docker 生成 Let’s Encrypt 证书

    概念 什么是 Container ? https://www.docker.com/resources/what-container https://www.docker.com/why-docker ...

  5. Java中只有值传递,(及值传递与引用传递详解)

    首先呢,我们来说一下值传递与引用传递的区别(这两个玩意儿实在调用函数的时候提到的) 比如说 code( a) code( int a ) code(a)是调用函数,a是我们原本函数的一个值类型,然后使 ...

  6. NAS

    NAS, Network Attached Storage, 网络附属存储, 简单来说就是连接在网络上, 可以存储资料的装置.可以用来做私有网盘,同步各种设备的照片.视频.音频和文件. 常见的 NAS ...

  7. android——实现跨程序访问数据

    使用之前的SQLite存储的应用程序.首先需要在这个应用程序中创建内容提供器,右击com.example.administrator.exp7包→New→Other→Content Provider, ...

  8. pycharm的安装配置及思维导图

    1.1 计算机基础知识 主板:人的骨架,用于扩展设备的 cpu:人的大脑,用于计算和逻辑处理的 硬盘:存储数据(永久存储) 电源:人的心脏 内存:存储数据(临时存储) 断电即消失 操作系统 xp wi ...

  9. python 之 前端开发(基本选择器、组合选择器、 交集与并集选择器、序列选择器、属性选择器、伪类选择器、伪元素选择器)

    11.3 css 11.31 基本选择器 11.311 id选择器 根据指定的id名称,在当前界面中找到对应的唯一一个的标签,然后设置属性 <!DOCTYPE html> <html ...

  10. Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解

    如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 最近一段时间生病了,整天往医院跑,也没状态学东西了,现在是好了不少了,也该继续学习啦!!! ...