BZOJ1449 球队收益

Output

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

Sample Input

3 3

1 0 2 1

1 1 10 1

0 1 3 3

1 2

2 3

3 1

Sample Output

43

我们先假设所有的球队都赢,算出答案。然后每场比赛都要提供一个输的场次。

考虑费用流。源点向每场比赛连边,每场比赛向两只队伍连边,队伍再向汇点连边。

注意到一只队伍的得分是关于输的场次的一个二次函数,所以每增加一个输场,增加或减少的收益不一样。所以我们拆边。设\(f_{i,k}\)表示第\(i\)只队伍输\(k\)场的收益,则第\(a\)条边的权值为\(f_{i,a}-f_{i,a-1}\)。然后再跑最小费用流。

因为这是个开口向上的二次函数,它的二阶导是大于\(0\)的。 所以\(f_{i,a}-f_{i,a-1}\)单调递增,这么拆边是对的。

代码:

#include<bits/stdc++.h>
#define ll long long
#define N 15005 using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} int n,m;
int S,T;
int win[N],lose[N];
int c[N],d[N];
int a[N],b[N];
struct road {
int to,next;
int f,c;
}s[N<<4]; int h[N<<2],cnt=1;
void add(int i,int j,int f,int c) {
s[++cnt]=(road) {j,h[i],f,c};h[i]=cnt;
s[++cnt]=(road) {i,h[j],0,-c};h[j]=cnt;
} int tim[N];
ll ans;
ll dis[N];
queue<int>q;
int fr[N],e[N];
bool in[N];
bool spfa(int S) {
memset(dis,0x3f,sizeof(dis));
dis[S]=0;
q.push(S);
while(!q.empty()) {
int v=q.front();q.pop();
in[v]=0;
for(int i=h[v];i;i=s[i].next) {
int to=s[i].to;
if(s[i].f&&dis[to]>dis[v]+s[i].c) {
dis[to]=dis[v]+s[i].c;
fr[to]=v;
e[to]=i;
if(!in[to]) {
in[to]=1;
q.push(to);
}
}
}
}
if(dis[T]>1e9) return 0;
ans+=dis[T];
for(int i=T;i;i=fr[i]) {
s[e[i]].f--;
s[e[i]^1].f++;
}
return 1;
} int main() {
n=Get(),m=Get();
for(int i=1;i<=n;i++) {
win[i]=Get(),lose[i]=Get();
c[i]=Get(),d[i]=Get();
}
T=m+n+1;
for(int i=1;i<=m;i++) {
a[i]=Get(),b[i]=Get();
add(S,i,1,0);
tim[a[i]]++,tim[b[i]]++;
add(i,a[i]+m,1,0),add(i,b[i]+m,1,0);
}
for(int i=1;i<=n;i++) {
ll last=1ll*c[i]*(win[i]+tim[i])*(win[i]+tim[i])+1ll*d[i]*lose[i]*lose[i],now;
ans+=last;
for(int j=1;j<=tim[i];j++) {
now=1ll*c[i]*(win[i]+tim[i]-j)*(win[i]+tim[i]-j)+1ll*d[i]*(lose[i]+j)*(lose[i]+j);
add(i+m,T,1,now-last);
last=now;
}
}
while(spfa(S));
cout<<ans;
return 0;
}

【BZOJ1449】 球队收益的更多相关文章

  1. 【BZOJ1449】[JSOI2009]球队收益(网络流,费用流)

    [BZOJ1449][JSOI2009]球队收益(网络流,费用流) 题面 BZOJ 洛谷 题解 首先对于一支队伍而言,总共进行多少场比赛显然是已知的,假设是\(n_i\)场,那么它的贡献是:\(C_i ...

  2. Bzoj1449 [JSOI2009]球队收益

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 741  Solved: 423 Description Input Output 一个整数表示联盟里所有球 ...

  3. 【BZOJ-1449&2895】球队收益&球队预算 最小费用最大流

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

  4. BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示   要求总费用最低 ...

  5. 【bzoj1449/bzoj2895】[JSOI2009]球队收益/球队预算 费用流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 题解 费用流 由于存在一 ...

  6. 【BZOJ】【1449】【JSOI2009】球队收益

    网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...

  7. bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 547  Solved: 302[Submit][Status][ ...

  8. BZOJ 1449: [JSOI2009]球队收益( 最小费用最大流)

    先考虑假如全部输了的收益. 再考虑每场比赛球队赢了所得收益的增加量,用这个来建图.. --------------------------------------------------------- ...

  9. 【BZOJ 1449】 1449: [JSOI2009]球队收益 (最小费用流)

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 841  Solved: 483 Description Inpu ...

随机推荐

  1. ProtoBuf使用指南(C++)

    ProtoBuf使用指南(C++) Created: Mar 12, 2019 6:47 PM Last Edited Time: Mar 22, 2019 1:51 PM 1.安装部署 去官网(gi ...

  2. 7.通用程序设计_EJ

    第45条: 将局部变量的作用域最小化 该条目与第13条(使类和成员的可访问性最小)本质上是类似的.要使局部变量的作用域最小化,最有利的方法就是在第一次使用它的地方声明.在每个局部变量的声明处都应该包含 ...

  3. ES6之Spread Operater拷贝对象

    译者按: 对象拷贝和合并使用展开运算符(Spread Operator)很方便! 原文: Master Javascript’s New, Cutting-Edge Object Spread Ope ...

  4. thinkphp——通过在线编辑器添加的内容在模板里正确显示(只显示内容,而不是html代码)

    thinkphp编辑器回显问题如下: 解决办法如下: 对于编辑器发布的内容,前台模板显示为html的解决办法是: 在模板输出字段加入html_entity_decode()函数 也就是:PHP输出时的 ...

  5. 【软工神话】第五篇(Beta收官)

    前言:这应该是最后一章了,故事虽然到这就结束了,但现实里还要继续下去,希望在很久的以后来回顾时,能因自己学生时代有这样的经历而欣慰. 说明:故事中的人物均是化名,故事情节经过些许加工,故事情节并没有针 ...

  6. blfs(systemd版本)学习笔记-构建gnome桌面系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 大概思路: lfs(系统)+xorg(驱动)+gnome(桌面组件) 链接: lfs(systemd版本)学习笔记系列:http ...

  7. MySQL5.7 搭建主从同步

    性能更好的新服务器申请下来了,我们决定在2台新服务器上使用mysql5.7,并且使用主从同步.读写分离架构,很不幸这个任务落到了我的头上.读写分离是在业务代码中实现的,在此不做详述,介绍一下我搭建My ...

  8. IIS ip访问限制插件

    Dynamic IP Restrictions Overview The Dynamic IP Restrictions Extension for IIS provides IT Professio ...

  9. 前后端分离djangorestframework——解析渲染组件

    解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程,本质就是对请求体中的数据进行解析 Accept是告诉对方我能解析什么样的数据,通常也可以表示我想要什么样的数 ...

  10. c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用

    c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间.成员 ...