题目描述

输入

输出

一个整数表示联盟里所有球队收益之和的最小值。

样例输入

3 3
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1

样例输出

43

提示

要求总费用最低考虑最小费用最大流。对于一场比赛同时决策两支队伍谁输谁赢不好办,我们先假设剩下的比赛每支队伍都输了,这样每次只要决策谁赢了即可。对于每次比赛将源点连向比赛,流量为$1$、费用为$0$;再将比赛连向两支队伍,流量为$1$、费用为$0$。假设每支队伍还有$k[i]$场比赛,那么就将这只队伍向汇点连$k[i]$条边,流量为$1$,每条边费用为多赢一次的收益。每支队伍的起始收益为$C[i]*x^2+D[i]*y^2,x=win[i],y=lose[i]+k[i]$,每多赢一次的收益为$C*(x+1)^2+D*(y-1)^2-C*x^2-D*y^2=C*(2x+1)-D*(2y-1)$,因为$D\le C$,所以每多赢一次的收益会单调递增,又因为是最小费用最大流,所以一定先选赢一次的边、再选赢两次的边、再选赢三次的边……

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define INF 10000000
using namespace std;
int head[10000];
int next[20000];
int to[20000];
int v[20000];
int c[20000];
int f[10000];
int from[20000];
int tot=1;
int S,T;
ll ans;
int n,m;
int x,y;
int s[10000];
int win[10000];
int lose[10000];
int C[10000];
int D[10000];
queue<int>q;
int vis[10000];
int d[10000];
void add(int x,int y,int z,int w)
{next[++tot]=head[x];head[x]=tot;to[tot]=y;v[tot]=z;c[tot]=w;from[tot]=x;next[++tot]=head[y];head[y]=tot;to[tot]=x;v[tot]=-z;c[tot]=0;from[tot]=y;
}
void result()
{int now=T;int flow=INF;while(now!=S){flow=min(flow,c[f[now]]);now=from[f[now]];}ans+=1ll*d[T]*flow;now=T;while(now!=S){c[f[now]]-=flow;c[f[now]^1]+=flow;now=from[f[now]];}
}
bool SPFA()
{for(int i=1;i<=T;i++){d[i]=INF;}d[S]=0;q.push(S);vis[S]=1;while(!q.empty()){int now=q.front();q.pop();vis[now]=0;for(int i=head[now];i;i=next[i]){if(!c[i]){continue;}if(d[to[i]]>d[now]+v[i]){d[to[i]]=d[now]+v[i];f[to[i]]=i;if(!vis[to[i]]){q.push(to[i]);vis[to[i]]=1;}}}}return d[T]!=INF;
}
void find_min()
{while(SPFA()){result();}
}
int main()
{scanf("%d%d",&n,&m);S=n+m+1;T=S+1;for(int i=1;i<=n;i++){scanf("%d%d%d%d",&win[i],&lose[i],&C[i],&D[i]);}for(int i=1;i<=m;i++){add(S,n+i,0,1);scanf("%d%d",&x,&y);s[x]++,s[y]++;add(n+i,x,0,1);add(n+i,y,0,1);}for(int i=1;i<=n;i++){ans+=1ll*C[i]*win[i]*win[i]+1ll*D[i]*(lose[i]+s[i])*(lose[i]+s[i]);x=win[i],y=lose[i]+s[i];for(int j=1;j<=s[i];j++){add(i,T,C[i]*(2*x+1)-D[i]*(2*y-1),1);x++,y--;}}find_min();printf("%lld",ans);
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/10569488.html

BZOJ1449[JSOI2009]球队收益BZOJ2895球队预算——最小费用最大流相关推荐

  1. 【BZOJ-14492895】球队收益球队预算 最小费用最大流

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 648  Solved: 364 [Submit][Status ...

  2. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

  3. 乌鲁木齐网络赛J题(最小费用最大流模板)

    ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报  分类: 网络流(33)  版权声 ...

  4. POJ - 2516 Minimum Cost 最小费用最大流

    题目链接 题意:给n,m,k表示商店数,储存店数,种类数 然后给n*k表示每个水果店需求每种种类的数量: 表示成 need[i][j] 再给m*k表示每个储存店每种种类数量: 表示成store[i][ ...

  5. pku The Windy's KM最小权匹配 or 最小费用最大流

    http://poj.org/problem?id=3686 题意: 给定n个玩具,有m个车间,给出每个玩具在每个车间的加工所需的时间mat[i][j]表示第i个玩具在第j个车间加工所需的时间,规顶只 ...

  6. 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)

    题目链接 题目大意: 解题思路: 又是一道裸题 . 首先它要求第iii个点只经过ViViVi那么我们就拆点ai,ai+na_i,a_{i+n}ai​,ai+n​一个点为入点,一个为出点这条边的流量范围 ...

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

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

  8. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  9. 【最小费用最大流】Going Home

    概念: 在同一个网络中,可能存在多个总流量相同的最大流,我们可以在计算流量的基础之上,给网络中的弧增加一个单位流量的费用(简称费用),在确保流量最大的前提下总费用最小--最小费用最大流. C - Go ...

最新文章

  1. 清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...
  2. 深度学习--感知机讲解
  3. ldap radius mysql_radius vs ldap
  4. 题解---2015年浙江理工12月校赛
  5. arguments.callee的临时指向特性
  6. Java可以加速播放的播放器,基于live555的rtsp播放器之十二:使用soundtouch加速音频播放...
  7. danfoss 变频器的profinet通讯调试_西门子G120变频器S7-300之间的PN通讯
  8. 网课答案查题方法详细步骤
  9. 新手使用CAD制图-需要了解的软件常识
  10. 机器学习--KNN算法应用,iris鸢尾花数据集的分类
  11. 想转行it , 培训还是自学?
  12. Not Assigning
  13. 无法定位程序输入点(cmake opencv_contrib,并配置后)
  14. MATLAB点云处理(十四):圆柱体拟合(RANSAC | MSAC)
  15. 彻底解决IDEA输出中文乱码问题
  16. 一堂难忘的计算机课作文,难忘的一堂课作文7篇
  17. 计算机通过华为手机上网,华为手机网络怎么共享给电脑(必知网络共享3步曲)...
  18. php设计鸡兔同笼问题解法,鸡兔同笼问题4种解题方法
  19. Gitlab RCE CVE-2021-22205
  20. 程序员工作面试题目汇总

热门文章

  1. linux下多线程实现服务端
  2. MySQL第9天:MySQL索引优化分析之join查询
  3. MySQL第4天:MySQL的架构介绍之修改数据库编码格式
  4. 学会理解并编辑/etc/fstab
  5. CentOS7安装Nginx及其相关
  6. docker分离部署lnmp
  7. 一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序...
  8. 亚太运营商在5G速率上领先
  9. 第七章、Linux 文件与目录管理
  10. js复制网站文字追加网站来源,网站版权