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

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000000
#define INF 99999999
int n, m, S, T, rec[maxn], flow[maxn], a[maxn], b[maxn];
int ans, tot, c[maxn], d[maxn], dis[maxn], num[maxn];
bool vis[maxn]; int read() {
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} struct edge {
int cnp, to[maxn], last[maxn], head[maxn], f[maxn], co[maxn];
edge() { cnp = ; }
void add(int u, int v, int fl, int w) {
to[cnp] = v, f[cnp] = fl, co[cnp] = w, last[cnp] = head[u], head[u] = cnp ++;
to[cnp] = u, f[cnp] = , co[cnp] = -w, last[cnp] = head[v], head[v] = cnp ++;
}
}E1; struct node {
int x, y;
}P[maxn]; int multi(int x) { return x * x; }
void Build() {
S = , T = * m + ;
for(int i = ; i <= n; i ++) {
int A = a[i] + num[i], B = b[i];
if(num[i]) rec[i] = tot + ;
for(int j = ; j <= num[i]; j ++) {
++ tot;
E1.add(tot, T, , * B * d[i] - * A * c[i] + c[i] + d[i]);
if(j != num[i]) E1.add(tot, tot + , INF, );
A --, B ++;
}
}
for(int i = ; i <= m; i ++) {
E1.add(S, ++ tot, , );
E1.add(tot, rec[P[i].x], , );
E1.add(tot, rec[P[i].y], , );
}
} bool SPFA() {
queue <int> q;
for(int i = ; i <= T; i ++) dis[i] = INF, vis[i] = ;
q.push(S); dis[S] = ; flow[S] = INF;
while(!q.empty()) {
int u = q.front(); q.pop(); vis[u] = ;
for(int i = E1.head[u]; i; i = E1.last[i]) {
int v = E1.to[i];
if(!E1.f[i]) continue;
if(dis[v] > dis[u] + E1.co[i]) {
dis[v] = dis[u] + E1.co[i];
rec[v] = i, flow[v] = min(flow[u], E1.f[i]);
if(!vis[v]) q.push(v), vis[v] = ;
}
}
}
if(dis[T] != INF) return ;
return ;
} int Max_Flow() {
int ans = , cost = ;
while(SPFA()) {
int u = T;
while(u != S) {
int t = rec[u];
E1.f[t] -= flow[T], E1.f[t ^ ] += flow[T];
u = E1.to[t ^ ];
}
ans += flow[T], cost += dis[T] * flow[T];
}
return cost;
} int main() {
n = read(), m = read();
for(int i = ; i <= n; i ++) {
a[i] = read(), b[i] = read(), c[i] = read(), d[i] = read();
}
for(int i = ; i <= m; i ++) {
int x = read(), y = read();
num[x] ++, num[y] ++; P[i].x = x, P[i].y = y;
}
for(int i = ; i <= n; i ++)
ans += c[i] * multi(a[i] + num[i]) + d[i] * multi(b[i]);
Build();
printf("%d\n", ans + Max_Flow());
return ;
}

【题解】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. 洛谷 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_ ...

  5. 「JSOI2009」球队收益 / 球队预算

    题目链接 戳我 \(Solution\) 我们发现这道题目并不好做,因为要考虑两个因素对答案的影响.于是我们假设接下来的\(m\)场比赛双方都输了.这要我们就只要考虑赢一场对答案的影响了,那每赢一场输 ...

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

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

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

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

  8. 【BZOJ】【1449】【JSOI2009】球队收益

    网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...

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

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

随机推荐

  1. Python中的异常(Exception)处理

    异常 当你的程序出现例外情况时就会发生异常(Exception).例如,当你想要读取一个文件时,而那个文件却不存在,怎么办?又或者你在程序执行时不小心把它删除了,怎么办?这些通过使用异常来进行处理. ...

  2. javascript实现对html便签等字符的转义

    参考链接:https://www.jb51.net/article/152700.htm 请访问以上链接. 本人纯搬迁,防止原作者删除. <script> var HtmlUtil = { ...

  3. 自动分配ip的方法- 【Linux】

    1.  查看本机无线网络使用的网卡 2.  设置vbox的网络连接为桥接,并选择本机无线网络对应的网卡 3.  进入系统,输入ifconfig命令,记录下系统的HWaddr 4.  修改系统ip配置文 ...

  4. Netty源码分析第7章(编码器和写数据)---->第1节: writeAndFlush的事件传播

    Netty源码分析第七章: 编码器和写数据 概述: 上一小章我们介绍了解码器, 这一章我们介绍编码器 其实编码器和解码器比较类似, 编码器也是一个handler, 并且属于outbounfHandle ...

  5. ats缓存规则

    一. 用户访问过程:1. ats收到一个用户对web对象的请求;2. 使用该地址, ats尝试着在其对象数据库(缓存)中用被请求对象的地址来定位该对象;3. 如果对象在缓存中, ats会检查该对象是否 ...

  6. 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块

    在已编译安装的PHP环境下安装LDAP模块 (乐维温馨提示:其他模块也能以这个方式安装) 1.在PHP源码包内找到ldap模块文件 cd php-5.6.37 cd ext/ldap/ 2.phpiz ...

  7. LeetCode-63.不同路径Ⅱ

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在考虑网 ...

  8. 笨办法学Python - 习题6-7: Strings and Text & More Printing

    目录 1.习题 6: 字符串(string) 和文本 2.加分习题: 3.我的答案 4.习题总结 5.习题 7: 更多打印 6.习题总结 1.习题 6: 字符串(string) 和文本 学习目标:了解 ...

  9. umask命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/stpeace/article/details/45509425        umask命令用得相对不多, 而umask函 ...

  10. nginx模块学习

    rewrite模块的语法 链接