bozj 1449/2895: 球队预算 -- 费用流
2895: 球队预算
Time Limit: 10 Sec Memory Limit: 256 MB
Description
Input
Output
Sample Input
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1
Sample Output
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: 球队预算 -- 费用流的更多相关文章
- 【BZOJ1449&&2895】球队预算 [费用流]
球队预算 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在一个篮球联赛里,有n支球队, 球 ...
- BZOJ 1449 JSOI2009 球队收益 费用流
题目大意:给定nn支球队.第ii支球队已经赢了winiwin_i场.输了loseilose_i场,接下来还有mm场比赛.每一个球队终于的收益为Ci∗x2i+Di∗y2iC_i*x_i^2+D_i*y_ ...
- 【bzoj1449/bzoj2895】[JSOI2009]球队收益/球队预算 费用流
题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 题解 费用流 由于存在一 ...
- [bzoj 1449] 球队收益(费用流)
[bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...
- 【BZOJ-1449&2895】球队收益&球队预算 最小费用最大流
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 648 Solved: 364[Submit][Status][ ...
- 【BZOJ1449/2895】[JSOI2009]球队收益/球队预算 最小费用最大流
[BZOJ2895]球队预算 Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=C ...
- BZOJ 1449: [JSOI2009]球队收益( 最小费用最大流)
先考虑假如全部输了的收益. 再考虑每场比赛球队赢了所得收益的增加量,用这个来建图.. --------------------------------------------------------- ...
- bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 547 Solved: 302[Submit][Status][ ...
- 【BZOJ1449】[JSOI2009]球队收益(网络流,费用流)
[BZOJ1449][JSOI2009]球队收益(网络流,费用流) 题面 BZOJ 洛谷 题解 首先对于一支队伍而言,总共进行多少场比赛显然是已知的,假设是\(n_i\)场,那么它的贡献是:\(C_i ...
随机推荐
- Daily Report-1126
今日: 上午主要是回顾了react,阅读官方文档的时候发现了list中key值设计的必要性. 看了部分react源码,发现有些吃力,在询问羽牧学长之后调整策略,从redux和mobx入手,先多熟悉用法 ...
- koa源码阅读[2]-koa-router
koa源码阅读[2]-koa-router 第三篇,有关koa生态中比较重要的一个中间件:koa-router 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose k ...
- Openflow Plugin学习笔记1
主入口 ConfigurableOpenFlowProviderModule是OpenFlowPlugin中启动加载的入口,如下: @Override public java.lang.AutoClo ...
- ThinkPHP的运行流程-1
我在index\Lib\Action\目录下新建了一个ShowAction.class.php文件.ps:该目录是控制器的目录. 然后这个文件中继承了action这个类.代码如下: 1 2 3 4 5 ...
- Shell-history命令加记录用户IP
记录输入的命令 history命令可以查看用户输入过的命令,一个典型history命令输出如下: 980 2017-05-29 20:17:37 cd - 981 2017-05-29 20:17:4 ...
- Linux下的lds链接脚本详解【转】
转自:http://www.cnblogs.com/li-hao/p/4107964.html 转载自:http://linux.chinaunix.net/techdoc/beginner/2009 ...
- 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:~ ...
- 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 解决 ...
- lumen 框架的特殊使用
1. 配置代码格式管理工具: composer require squizlabs/php_codesniffer, 使用 php artisan cs 检查代码格式: 2.单元测试用例编写 1./d ...
- 美化的select下拉框
ie7浏览器以后的下拉框,给他加上边框样式,是没用的.要是想做出样式好看的下拉框需要用js或者jquery来模拟实现. 代码如下: <div class="r"> &l ...