题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6437

因为每个视频看的人数都有限制(只能一个人看),所以可以用流量表示这个限制的值为1,然后求最大值可以把费用取反变成求最小费用。

对每个视频拆点,中间的费用为-w【i】,开头到其和其到结尾的费用都是0,保证只计算一次值。两个起点用来限制输入的人数,流量为k,其余的流量都为1。

建模真的挺重要的

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 998244353
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
#define type int
using namespace std;//s源点t汇点N总点数const int maxn=1005;
const int maxm=100005;
int n,m;
int s, t;
struct node {int u, v, next;type cap, flow, cost;
}edge[maxm];
int head[maxn], cnt;
int pre[maxn];
type dis[maxn];
bool vis[maxn];
int N;void init () {memset (head, -1, sizeof head);cnt = 0;
}void add_edge (int u, int v, type cap, type cost) {edge[cnt].u = u, edge[cnt].v = v, edge[cnt].cap = cap, edge[cnt].flow = 0;edge[cnt].cost = cost, edge[cnt].next = head[u], head[u] = cnt++;edge[cnt].u = v, edge[cnt].v = u, edge[cnt].cap = 0, edge[cnt].flow = 0;edge[cnt].cost = -cost, edge[cnt].next = head[v], head[v] = cnt++;
}bool spfa (int s, int t) {queue <int> q;for (int i = 0; i < N; i++) {dis[i] = INF;vis[i] = 0;pre[i] = -1;}dis[s] = 0;vis[s] = 1;q.push (s);while (!q.empty ()) {int u = q.front (); q.pop ();vis[u] = 0;for (int i = head[u]; i != -1; i = edge[i].next) {int v = edge[i].v;if (edge[i].cap > edge[i].flow && dis[v] > dis[u]+edge[i].cost) {dis[v] = dis[u]+edge[i].cost;pre[v] = i;if (!vis[v]) {vis[v] = 1;q.push (v);}}}}if (pre[t] == -1)return 0;elsereturn 1;
}int MCMF (int s, int t, type &cost) {type flow = 0;cost = 0;while (spfa (s, t)) {type Min = INF;for (int i = pre[t]; i != -1; i = pre[edge[i^1].v]) {if (Min > edge[i].cap-edge[i].flow) {Min = edge[i].cap-edge[i].flow;}}for (int i = pre[t]; i != -1; i = pre[edge[i^1].v]) {edge[i].flow += Min;edge[i^1].flow -= Min;cost += edge[i].cost*Min;}flow += Min;}return flow;
}int l[210],r[210],w[210],op[210];int main()
{int tt;scanf("%d",&tt);while(tt--){init();int n,m,k,W;scanf("%d%d%d%d",&n,&m,&k,&W);For(i,1,m){scanf("%d%d%d%d",&l[i],&r[i],&w[i],&op[i]);}s=0,t=2*m+2;add_edge(0,1,k,0);For(i,1,m)add_edge(1,i+1,1,0),add_edge(i+1,i+1+m,1,-w[i]),add_edge(i+1+m,t,1,0);For(i,1,m){For(j,i+1,m){int tem;if(op[i]==op[j])tem=W;else tem=0;if(r[i]<=l[j])add_edge(i+1+m,j+1,1,tem);else if(r[j]<=l[i])add_edge(j+1+m,i+1,1,tem);}}int ans;N=2*m+3;MCMF(s,t,ans);printf("%d\n",-ans);}return 0;
}

hdu 6437 Videos 最小费用最大流相关推荐

  1. Going Home HDU - 1533 (最小费用最大流)

    题目链接:https://cn.vjudge.net/problem/HDU-1533 题意:给你n个房子n个人  使得所有人都有一座房子的最小花费 思路:把所有的人与房子建边,最后,源点与所有的人建 ...

  2. POJ 2195 Going Home / HDU 1533(最小费用最大流模板)

    题目大意: 有一个最大是100 * 100 的网格图,上面有 s 个 房子和人,人每移动一个格子花费1的代价,求最小代价让所有的人都进入一个房子.每个房子只能进入一个人. 算法讨论: 注意是KM 和 ...

  3. hdu 1533(最小费用最大流)

    主要是如何建图 #include<stdio.h> #include<queue> #include<string.h> #include<iostream& ...

  4. HDU 2282 Chocolate (最小费用最大流)

    HDU  2282 Chocolate (最小费用最大流) #include <iostream> #include <cstdio> #include <queue&g ...

  5. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  6. 【HDU - 6118】度度熊的交易计划(最小费用可行流,网络流费用流变形 )

    题干: 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个 ...

  7. hdu Kaka's Matrix Travels(最小费用最大流)

    把题意写一下:  给你一个n*n的矩阵,每个格子都有一个非负整数,从左上角走到右下角,收集走过的数字,累加,但是只能向右或者向下走,走过之后数字就变为0,让你求从左上角到右下角,走k次之后,所得的最大 ...

  8. HDU 6445 Search for Answer(最小费用最大流-mcmf)

    Description 给出一个nnn个点的完全图的邻接矩阵aaa,其中ai,j=1a_{i,j}=1ai,j​=1表示i,ji,ji,j之间边的方向是iii到jjj,ai,j=0a_{i,j}=0a ...

  9. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  10. 网络流--最小费用最大流 (理解)

    1.什么是最小费用最大流问题 上篇文章我们讲解了最大流问题,那什么是最小费用最大流呢?听名字就可以看出,我们要在满足最大流的同时找到达成最大流的最小费用. 对于一个网络流,最大流是一定的,但是组成最大 ...

最新文章

  1. 批量下载的实现及java.lang.IllegalStateException异常
  2. [老男孩笔记系列]-之linux定时任务crontab命令详解
  3. 编译php7.0.17报错提示 undefined reference to `libiconv_open'
  4. 天云大数据_天云大数据三度蝉联毕马威领先金融科技50强
  5. rabbin负载均衡
  6. myeclipse始终build workspace
  7. hibernate之CRUD操作
  8. python工程师面试宝典_2019年,Python工程师必考的6个面试题,Python面试题No5
  9. Java面试常问基础知识(持续更新)
  10. vc只能调用matlab子函数,Vc++6.0调用matlab的数学库函数
  11. SCCM配置PXE启动
  12. 桌面时间的最佳管理者-软媒时间
  13. PyQt5 +requests 写一个能播放全网音乐的播放器
  14. 蓝桥杯单片机备赛笔记
  15. 新手淘客你必须知道的秘密
  16. Python爬虫编程思想(82):管理SQLite数据库
  17. 360wifi使用方法|360wifi使用教程
  18. CentOS 7下atime如何变化的问题(转)
  19. 路过图床插件,支持一键上传返回各类链接
  20. Twilight的卡牌游戏

热门文章

  1. 74CMS4.1.2.4版本黑盒测试
  2. 如何解决应用程序无法启动,因为应用程序的并行配置不正确问题
  3. Mac 安装Nessus
  4. Scratch案例——弹球游戏
  5. CDA level 1 业务分析师 之 业务分析部分PART 5 多维数据透视分析(10%)
  6. 产品生命周期管理PLM系统概述——睿思成研发管理咨询(www.wiserdm.com)
  7. 前端数据可视化插件(四)关系图
  8. qtcpsocket断开_QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)...
  9. 中华石杉-- --消息队列的笔记
  10. UltraEdit(UE)主窗口颜色修改