【题解】JSOI2009球队收益 / 球队预算
为什么大家都不写把输的场次增加的呢?我一定要让大家知道,这并没有什么关系~所以 \(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球队收益 / 球队预算的更多相关文章
- 【BZOJ1449/2895】[JSOI2009]球队收益/球队预算 最小费用最大流
[BZOJ2895]球队预算 Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=C ...
- 【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&2895】球队收益&球队预算 最小费用最大流
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 648 Solved: 364[Submit][Status][ ...
- 洛谷 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_ ...
- 「JSOI2009」球队收益 / 球队预算
题目链接 戳我 \(Solution\) 我们发现这道题目并不好做,因为要考虑两个因素对答案的影响.于是我们假设接下来的\(m\)场比赛双方都输了.这要我们就只要考虑赢一场对答案的影响了,那每赢一场输 ...
- BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流
题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示 要求总费用最低 ...
- [BZOJ1449] [JSOI2009]球队收益 / [BZOJ2895] 球队预算
Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Cix^2+Diy^2,Di<=Ci.(赢得多,给球员的奖金就多嘛) ...
- 【BZOJ】【1449】【JSOI2009】球队收益
网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...
- 【BZOJ1449】[JSOI2009]球队收益(网络流,费用流)
[BZOJ1449][JSOI2009]球队收益(网络流,费用流) 题面 BZOJ 洛谷 题解 首先对于一支队伍而言,总共进行多少场比赛显然是已知的,假设是\(n_i\)场,那么它的贡献是:\(C_i ...
随机推荐
- 保留mysql数据库中的最新1000条记录
<?php mysql_connect("localhost","root","root");mysql_select_db(&quo ...
- linux常用命令总结(含选项参数)
• 用户切换 su 切换到root用户并不切换环境 su - root 切换到root用户并切换环境 su redhat 切换到redhat不切换环境 • cd切换目 ...
- spring boot 配置全局日期类型转换器
1. 首先自定义一个类型转换器 import org.springframework.core.convert.converter.Converter; import org.springframew ...
- Linux 文件搜索命令:find、which、whereis 和 locate
Linux 提供了许多用于文件搜索的命令,这些命令都很强大,但是也有一些不同之处,这里分别介绍一下. 一.find 命令 find 是最常见和最强大的一个文件搜索命令.使用 find 命令可以在指定目 ...
- PHP处理表单数据的一个安全回顾(记录教训)
曾经看过一个安全文章中写过这么一条 表单输入数据要做 htmlspecialchars_decode 表单输出数据要做htmlspecialchars 当时还不是很理解为什么,自己也没遇到问题,所以就 ...
- 前端_html
目录 HTML介绍 标签说明 常用标签 <!DOCTYPE>标签 <head>内常用标签 <body>内常用标签 特殊字符 其他:各种各样的标签 HTML的规范 H ...
- 【转】Java生成plist下载ipa文件
我们在上传ipa想要安装的时候必须要通过plist文件去下载,并且还要遵循 itms-services协议. 意思就是,第一步我们要生成一个plist文件, 第二步生成一个html文件,用来指向pli ...
- LeetCode 561. Array Partition I (C++)
题目: Given an array of 2n integers, your task is to group these integers into npairs of integer, say ...
- 11.15 Daily Scrum
今天是假期回来的第一个周末,也是我们团队的又一次进度汇总总结和调试工作开展,鉴于一周以来大家的工作有了很大的成果,所以,本次召开的会议主旨在于解决一些开发方面的细节问题,达成共识,为日后进一步的功能方 ...
- cnblogs用户体验及建议
一.是否提供了良好的体验给用户(同时提供价值)? 我觉得博客园还是给用户提供了良好的用户体验的,它可以从用户的角度考虑,用户在注册的时候,用户自己在设置用户名和密码的时候,如果与他人重复会有提示,而且 ...