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 ...
随机推荐
- flask基础之jijia2模板语言进阶(三)
前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...
- UNIX环境高级编程学习笔记(十)为何 fork 函数会有两个不同的返回值【转】
转自:http://blog.csdn.net/fool_duck/article/details/46917377 以下是基于 linux 0.11 内核的说明. 在init/main.c第138行 ...
- Python 正则表达式、re模块
一.正则表达式 对字符串的操作的需求几乎无处不在,比如网站注册时输入的手机号.邮箱判断是否合法.虽然可以使用python中的字符串内置函数,但是操作起来非常麻烦,代码冗余不利于重复使用. 正则表达式是 ...
- 002_让你的linux虚拟终端五彩缤纷(1)——LS颜色设置
- 删除数组某一项,使用splice的坑
var arr=[1,2,3,4,5,6,7,8,9,10];//创建数组 var testArr=arr;//让testArr等于创建的数组 arr.splice(0,1);删除arr数组的第一项 ...
- Maven核心概念
一.坐标 在平面几何中,坐标(x,y)可以标识平面中唯一的一个点.在maven中,坐标是为了定位一个唯一确定的jar包.Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范:拥有了 ...
- pandas安装及使用
一. 安装pandas1. Anaconda 安装pandas.Python和SciPy最简单的方式是用Anaconda.Anaconda是关于Python数据分析和科学计算的分发包.2 ...
- 一键去除网页BOM属性【解决乱码,头部空白,问题】
几个常出现的问题: 1.网站打开空白 2.页面头部出现多余的空白 3.网站出现乱码,如“锘�” 解决方法可以是: 1.选用专业的编辑器,例如notepad++,sublime,editplus这样不会 ...
- json数据操作
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- (三)Spring 之AOP 详解
第一节:AOP 简介 AOP 简介:百度百科: 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点,也是Spring框架中的一个 ...