题目链接

戳我

\(Solution\)

我们发现这道题目并不好做,因为要考虑两个因素对答案的影响。于是我们假设接下来的\(m\)场比赛双方都输了。这要我们就只要考虑赢一场对答案的影响了,那每赢一场输的数量就会减少\(1\).所以我们来化简一下式子:

\[c*(x+1)^2-d*(y-1)^2-c*x^2-d*y^2=2*c*x-2*d*y+c+d
\]

\(x\)为赢的数量,\(y\)为输的数量

我们对于这个发现不能直接的算贡献,于是直接拆边做费用流就好了,最后答案就是全输之后的答案加上费用流即可

\(Code\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9')
x=x*10+c-'0',c=getchar();
return x*f;
}
struct node{
int to,next,v,w;
}a[1000001];
int dis[10001],f[10001],pre[10001],fa[10001],s,t,n,m,head[10001],cnt,x,y,z,c,win[10001],lost[10001],vis[10001],C[10001],D[10001];
void add(int x,int y,int c,int v){
a[++cnt].to=y,a[cnt].next=head[x],a[cnt].v=c,a[cnt].w=v,head[x]=cnt;
a[++cnt].to=x,a[cnt].next=head[y],a[cnt].v=0,a[cnt].w=-v,head[y]=cnt;
}
queue < int > q;
int spfa(){
q.push(s);
memset(dis,127,sizeof(dis));
memset(f,0,sizeof(f));
f[s]=1,dis[s]=0;
int inf=dis[s+1];
while(!q.empty()){
int now=q.front();
q.pop();
f[now]=0;
for(int i=head[now];i;i=a[i].next){
int v=a[i].to;
if(dis[v]>dis[now]+a[i].w&&a[i].v){
dis[v]=dis[now]+a[i].w,pre[v]=i,fa[v]=now;
if(!f[v])
f[v]=1,q.push(v);
}
}
}
if(dis[t]!=inf)
return 1;
return 0;
}
int ans1,ans,res;
void answer(){
while(spfa()){
int minx=2147483647;
for(int i=t;i!=s;i=fa[i])
minx=min(minx,a[pre[i]].v);
ans+=minx,ans1+=dis[t]*minx;
for(int i=t;i!=s;i=fa[i])
a[pre[i]].v-=minx,(pre[i]%2)?a[pre[i]+1].v+=minx:a[pre[i]-1].v+=minx;
}
}
int main(){
n=read(),m=read(),s=0,t=n+m+1;
for(int i=1;i<=n;i++)
win[i]=read(),lost[i]=read(),C[i]=read(),D[i]=read();
for(int i=1;i<=m;i++)
x=read(),y=read(),add(s,i,1,0),add(i,x+m,1,0),add(i,y+m,1,0),vis[x]++,vis[y]++;
for(int i=1;i<=n;i++)
lost[i]+=vis[i],res+=C[i]*win[i]*win[i]+D[i]*lost[i]*lost[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=vis[i];j++)
add(i+m,t,1,C[i]*win[i]*2-D[i]*lost[i]*2+C[i]+D[i]),lost[i]--,win[i]++;
answer();
printf("%d",res+ans1);
}

「JSOI2009」球队收益 / 球队预算的更多相关文章

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

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

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

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

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

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

  4. 【题解】JSOI2009球队收益 / 球队预算

    为什么大家都不写把输的场次增加的呢?我一定要让大家知道,这并没有什么关系~所以 \(C[i] <= D[i]\) 的条件就是来卖萌哒?? #include <bits/stdc++.h&g ...

  5. 洛谷 P4307 [JSOI2009]球队收益 / 球队预算(最小费用最大流)

    题面 luogu 题解 最小费用最大流 先假设剩下\(m\)场比赛,双方全输. 考虑\(i\)赢一局的贡献 \(C_i*(a_i+1)^2+D_i*(b_i-1)^2-C_i*a_i^2-D_i*b_ ...

  6. 「NOIP2006」「LuoguP1064」 金明的预算方案(分组背包

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...

  7. 「APIO2012」派遣

    「APIO2012」派遣 传送门 当预算超过限制时,优先丢掉薪水高的忍者(左偏树维护一下),然后答案取合法答案的最大值. 参考代码: #include <algorithm> #inclu ...

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

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

  9. [BZOJ1449] [JSOI2009]球队收益 / [BZOJ2895] 球队预算

    Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Cix^2+Diy^2,Di<=Ci.(赢得多,给球员的奖金就多嘛) ...

随机推荐

  1. 类的特殊成员方法,类的起源type, metaclass

    1.__doc__表示类的描述信息 2. __module__ 和  __class__  __module__ 表示当前操作的对象在那个模块 __class__     表示当前操作的对象的类是什么 ...

  2. Rest之路 - 第一个Rest程序

    在 Eclipse 里新建一个 Dynamic project 将 Jersey 的 jar 包,拷贝到 WebContent -> WEB-INF -> lib 文件夹 Add jars ...

  3. 关于Unity发布iOS平台代码混淆问题

    之前在越狱手机里找到<永恒战士3>的程序发现是用Unity做的,拷出资源出来看的时候发现里面有游戏程序集,立马抽出来反编译了一下,发现里面的代码只有方法签名,没有方法体,还以为用什么高端混 ...

  4. Unicode 和 UTF-8关系

    unicode 就是 “与存储无关的表示”,utf—8 就是 “二进制表示”.一句话,utf8是对unicode字符集进行编码的一种编码方式,utf8是给unicode字符集加了一个存储类型前缀. u ...

  5. Django界面不能添加中文解决办法

    Django项目部署好后,界面添加中文会报错,解决办法: 创建数据库时要指定编码格式: CREATE DATABASE blog CHARACTER SET utf8; 如果已经创建完毕则修改: al ...

  6. Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)

    在接触WebService时值得收藏的一篇文章: 在调试Axis1.4访问WebService服务时,出现以下错误: Unable to find required classes (javax.ac ...

  7. Spark的几个问题

    1.application是由driver和executor组成的,executor可以分成task,task又可以分成为stage.当一个任务提交给spark之后,spark机群的主节点会出现dri ...

  8. 如何用navicat premium 链接Oracel数据库

    1.连接->Oracle 2.填写配置信息 3.填写完成后连接测试,发现报错 : TNS:listener does not currently know of service requeste ...

  9. Mac设置Root密码

    [Mac设置Root密码] Mac系统重新设置root用户密码 如果不知道root用户密码,需要重设.   命令[sudo passwd root ]   然后提示你输入当前登录用户密码,通过以后, ...

  10. 粗粒度(Coarse-grained)vs细粒度(fine-grained)

    在读的一篇文献中关于RDF的描述: As we know, RDF data is a set of triples with the form (subject, property, object) ...