Description

Input

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
orz huzecong
神犇的想法果然与众不同
首先看上去像网络流。这样就够了
先假设每场比赛两队都是输的,那么接下来转换的时候只要把其中一对变成赢的就好了。
考虑一支球队已经赢了x场输了y场现在要把输的y场之一变成赢的,考虑这样对答案的影响
原来是C[i]*x^2+D[i]*y^2,现在是C[i]*(x+1)^2+D[i]*(y-1)^2
那么在这支球队赢x场输y场的时候把一场输的变成赢的,对答案的贡献就是两个相减
对于一支一开始赢x场输y场的球队,我们向T连边,代价是从(x,y)变成(x+1,y-1)的代价。
然后还有从(x+1,y-1)到(x+2,y-2)……
因为是最小费用最大流,正确性显然
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<ctime>
#define LL long long
#define inf 0x3ffffff
#define S 0
#define T n+m+1
#define N 6010
using namespace std;
inline LL read()
{LL x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct edge{int to,next,from,v,c;}e[10*N];
struct match{int x,y;}M[100010];
int head[N],from[N],dist[N],q[N];
bool mrk[N];
int n,m,ans,cnt=1;
int a[N],b[N],C[N],D[N];
inline void ins(int u,int v,int w,int c)
{e[++cnt].to=v;e[cnt].v=w;e[cnt].c=c;e[cnt].from=u;e[cnt].next=head[u];head[u]=cnt;
}
inline void insert(int u,int v,int w,int c)
{ins(u,v,w,c);ins(v,u,0,-c);
}
inline bool spfa()
{for(int i=0;i<=T;i++)dist[i]=inf;int t=0,w=1;dist[S]=0;q[0]=S;mrk[S]=1;while (t!=w){int now=q[t++];if (t==6005)t=0;for (int i=head[now];i;i=e[i].next)if(e[i].v&&dist[now]+e[i].c<dist[e[i].to]){dist[e[i].to]=dist[now]+e[i].c;from[e[i].to]=i;if (!mrk[e[i].to]){mrk[e[i].to]=1;q[w++]=e[i].to;if(w==6005)w=0;}}mrk[now]=0;}return dist[T]!=inf;
}
inline void mcf()
{int x=inf;for (int i=from[T];i;i=from[e[i].from])x=min(x,e[i].v);for (int i=from[T];i;i=from[e[i].from]){e[i].v-=x;e[i^1].v+=x;ans+=x*e[i].c;}
}
int main()
{n=read();m=read();for (int i=1;i<=n;i++){a[i]=read();b[i]=read();C[i]=read();D[i]=read();}for(int i=1;i<=m;i++){M[i].x=read();M[i].y=read();b[M[i].x]++;b[M[i].y]++;insert(S,i,1,0);insert(i,m+M[i].x,1,0);insert(i,m+M[i].y,1,0);}for (int i=1;i<=n;i++)ans+=a[i]*a[i]*C[i]+b[i]*b[i]*D[i];for (int i=1;i<=m;i++){int x=M[i].x,y=M[i].y;insert(m+x,T,1,2*a[x]*C[x]-2*b[x]*D[x]+C[x]+D[x]);a[x]++;b[x]--;insert(m+y,T,1,2*a[y]*C[y]-2*b[y]*D[y]+C[y]+D[y]);a[y]++;b[y]--;}while (spfa())mcf();printf("%d\n",ans);return 0;
}

  

S向所有比赛连边,所有比赛向两队连边。所有队伍

转载于:https://www.cnblogs.com/zhber/p/4215838.html

bzoj1449 [JSOI2009]球队收益相关推荐

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

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

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

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

  3. [JSOI2009]球队收益

    题目 这题好神啊 我们发现一个球队的总比赛场数是确定的,设第\(i\)支球队一共进行了\(s_i\)场比赛 于是这个球队的收益就是\(c_i\times x^2+d_i(s_i-x)^2\) 我们拆开 ...

  4. [JSOI2009]球队收益 Solution

    题意:有nnn个球队,如果一支球队胜场为xix_ixi​,负场为yiy_iyi​,那么他们的奖金即为Ci×xi2+Di×yi2C_i\times x_i^2+D_i\times y_i^2Ci​×xi ...

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

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

  6. WC2007 剪刀石头布【补集转化+比赛问题费用流】

    题目描述: N个点的竞赛图,已知一部分比赛结果,求安排剩下比赛的胜负情况,使得三元环的数量最大(A胜B,B胜C,C胜A).N<=100 题目分析: 直接统计三元环并不好做,考虑非三元环的情况,必 ...

  7. [NetworkFlow]网络流建模相关

    流 网络流问题本质上是线性规划问题的应用之一,线性规划问题的标准形式是给出一组等式约束和不等式约束,要求最优化一个线性函数. 在流问题中,变量以流量的形式出现在问题中,我们给出一个流网络(以有向图的形 ...

  8. bzoj乱刷计划2 19/20

    前言 话说第一个乱刷计划很顺利地完成了 感觉写成一个题表的形式还是很支持的 于是我决定再开一个.. 打算 依然是可以做自己没做过的题,也可以复习做过的.同时尽量学一些自己不会的吧 乱刷计划2 3158 ...

  9. c语言设计思路和有点不足,C语言总结报告

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当初报考计算机专业,是看到计算机专业在当今社会有良 ...

最新文章

  1. 自学笔记——2.字符串的切片、遍历、查找字符
  2. shell 变量定义使用
  3. 产品操作-查询全部产品
  4. classloader.getresources() 介绍
  5. 资源| 深度学习公众号推荐(值得关注的公众号)
  6. php sql慢查询,一个用户SQL慢查询分析,原因及优化_MySQL
  7. 用户没有create session权限_快速搞懂Oracle 19c安全新特性 (二)Privilege Analysis(权限分析)...
  8. entity framework 动态条件
  9. bjui 公共的弹窗确认 取消 改变文字
  10. 打开ps显示计算机内存不足怎么办,如何解决PS内存不足的问题
  11. 【Unity实战100例】技能伤害区域判定(矩形,圆,三角形,扇形)(三)
  12. 毕业设计基本要求计算机,计算机学院关于本科毕业设计(论文)的基本要求.doc
  13. 外网远程桌面连接内网服务器教程(超详细)
  14. 截段八面体堆积 matlab,截角八面体可以充满空间
  15. OpenGLES2.0渲图步骤:绘几何图形、图片处理、离屏渲染(3)
  16. Outlook 2013 英文版 设置收信规则
  17. 小米8手机相册中的图片怎么识别文字?
  18. 光标大小怎么调_cad十字光标和坐标系,你必知的几个小技巧!
  19. Android自动电话录音开发过程及问题
  20. 用wingrub从硬盘安装linux

热门文章

  1. git patch 应用
  2. dispatch_after中时间的计算
  3. PHP curl get post通用类
  4. 格式化显示(日期\货币)
  5. linux修改resolv自动清除,centos 6.2的/etc/resolv.conf自动清空问题
  6. 利用dynamoRIO实现codeCoverage
  7. scala基础之提取器extractor
  8. FileMessageSet分析
  9. (111)FPGA面试题-介绍Verilog 块语句fork-join执行过程
  10. (50)VHDL实现增减计数器