2895: 球队预算

Time Limit: 10 Sec  Memory Limit: 256 MB

Description

在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=Ci。(赢得多,给球员的奖金就多嘛)
其中x,y分别表示这只球队本赛季的胜负场次。现在赛季进行到了一半,每只球队分别取得了a[i]场胜利和b[i]场失利。而接下来还有m场比赛要进行。问联盟球队的最小总支出是多少。

Input

第一行n,m
接下来n行每行4个整数a[i],b[i],Ci,Di
再接下来m行每行两个整数s,t表示第s支队伍和第t支队伍之间将有一场比赛,注意两只队间可能有多场比赛。

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
Data Limit
对于20%的数据2<=n<=10,0<=m<=20
对于100%的数据2<=n<=5000,0<=m<=1000,0<=di<=ci<=10,0<=a[i],b[i]<=50.

HINT

一个很巧妙的建图思想,因为对于胜负的影响我们不好表示,所以我们假定所有人都是输的,然后就可以只考虑一场胜利对其的影响

我们先从源点像每个比赛建一条流量为1,费用为0的边(每场有且只有一个队伍胜利)

然后从比赛像两支队伍i分别建一条流量为1,费用为0的边

接下来考虑如何连向汇点

首先我们肯定对于每只队伍都需要建基础分为权值的边

然后每可以多赢一场我们就建一条权值为与上一次的差的边,这个我们是可以算出来的

因为C>=D,所以权值是递增的,所以要是取边的话,一定优先取最靠前的边

所以对于每个点取的边一定是连续的,这样就映射到了每个队胜利的场数

然后这样就跑最小费用最大流就可以了

#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 100010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int lj[N],fro[N],to[N],v[N],w[N],fa[N],cnt=;
inline void add(int a,int b,int c,int d){fro[++cnt]=lj[a];to[cnt]=b;v[cnt]=c;w[cnt]=d;fa[cnt]=a;lj[a]=cnt;}
inline void ins(int a,int b,int c,int d){add(a,b,c,d);add(b,a,,-d);}
int T=;
int dis[N],q[N],from[N];
bool vs[N];
bool spfa()
{
memset(dis,0x3f,sizeof(dis));
int l=,r=,x;
vs[]=;dis[]=q[]=;
while(l<r)
{
x=q[l++];vs[x]=;
for(int i=lj[x];i;i=fro[i])
if(v[i]&&dis[to[i]]>dis[x]+w[i])
{
dis[to[i]]=dis[x]+w[i];
from[to[i]]=i;
if(!vs[to[i]]){vs[to[i]]=;q[r++]=to[i];}
}
}
return dis[T]<inf;
}
int n,m,a[N],b[N],c[N],d[N],ji[N],ans;
int main()
{
n=rd();m=rd();
for(int i=;i<=n;i++)
{
a[i]=rd();b[i]=rd();c[i]=rd();d[i]=rd();
}
int x,y;
for(int i=;i<=m;i++)
{
x=rd();y=rd();
ins(,i,,);
ins(i,x+m,,);
ins(i,y+m,,);
ji[x]++;ji[y]++;
}
for(int i=;i<=n;i++)
{
b[i]+=ji[i];
ans+=a[i]*a[i]*c[i]+b[i]*b[i]*d[i];
}
for(int i=;i<=n;i++)
{
for(int j=;j<=ji[i];j++)
{
ins(i+m,T,,*c[i]*a[i]-*d[i]*b[i]+c[i]+d[i]);
a[i]++;b[i]--;
}
}
int tp;
while(spfa())
{
tp=inf;
for(int i=from[T];i;i=from[fa[i]]) tp=min(tp,v[i]);
for(int i=from[T];i;i=from[fa[i]]){v[i]-=tp;v[i^]+=tp;}
ans+=dis[T]*tp;
}
printf("%d\n",ans);
return ;
}

bozj 1449/2895: 球队预算 -- 费用流的更多相关文章

  1. 【BZOJ1449&&2895】球队预算 [费用流]

    球队预算 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在一个篮球联赛里,有n支球队, 球 ...

  2. BZOJ 1449 JSOI2009 球队收益 费用流

    题目大意:给定nn支球队.第ii支球队已经赢了winiwin_i场.输了loseilose_i场,接下来还有mm场比赛.每一个球队终于的收益为Ci∗x2i+Di∗y2iC_i*x_i^2+D_i*y_ ...

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

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

  4. [bzoj 1449] 球队收益(费用流)

    [bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...

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

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

  6. 【BZOJ1449/2895】[JSOI2009]球队收益/球队预算 最小费用最大流

    [BZOJ2895]球队预算 Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=C ...

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

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

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

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

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

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

随机推荐

  1. Daily Report-1126

    今日: 上午主要是回顾了react,阅读官方文档的时候发现了list中key值设计的必要性. 看了部分react源码,发现有些吃力,在询问羽牧学长之后调整策略,从redux和mobx入手,先多熟悉用法 ...

  2. koa源码阅读[2]-koa-router

    koa源码阅读[2]-koa-router 第三篇,有关koa生态中比较重要的一个中间件:koa-router 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose k ...

  3. Openflow Plugin学习笔记1

    主入口 ConfigurableOpenFlowProviderModule是OpenFlowPlugin中启动加载的入口,如下: @Override public java.lang.AutoClo ...

  4. ThinkPHP的运行流程-1

    我在index\Lib\Action\目录下新建了一个ShowAction.class.php文件.ps:该目录是控制器的目录. 然后这个文件中继承了action这个类.代码如下: 1 2 3 4 5 ...

  5. Shell-history命令加记录用户IP

    记录输入的命令 history命令可以查看用户输入过的命令,一个典型history命令输出如下: 980 2017-05-29 20:17:37 cd - 981 2017-05-29 20:17:4 ...

  6. Linux下的lds链接脚本详解【转】

    转自:http://www.cnblogs.com/li-hao/p/4107964.html 转载自:http://linux.chinaunix.net/techdoc/beginner/2009 ...

  7. Jmeter命令行选项

    示例:jmeter.bat -n -j %tmp%\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~ ...

  8. rpmdb: Thread/process 9180/139855524558592 failed: Thread died in Berkeley DB library

    使用yum安装出现问题:rpmdb: Thread/process 9180/139855524558592 failed: Thread died in Berkeley DB library 解决 ...

  9. lumen 框架的特殊使用

    1. 配置代码格式管理工具: composer require squizlabs/php_codesniffer, 使用 php artisan cs 检查代码格式: 2.单元测试用例编写 1./d ...

  10. 美化的select下拉框

    ie7浏览器以后的下拉框,给他加上边框样式,是没用的.要是想做出样式好看的下拉框需要用js或者jquery来模拟实现. 代码如下: <div class="r"> &l ...