为什么大家都不写把输的场次增加的呢?我一定要让大家知道,这并没有什么关系~所以 \(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. Jmeter+ant+jenkins接口自动化测试 平台搭建(二)

    一.依赖文件配置 1.在ant目录C:\apache-ant-1.10.5下新建一个demo文件夹,并将jmeter测试脚本放在该文件夹中 2.将\apache-jmeter-3.3\extras下面 ...

  2. HTML中的map和area标签

    1. 标签介绍: (1)map标签: 该标签是指图片的映射,也就是说一张可以点击的图片的映射: 属性介绍: <1> id: <img>中的 usemap 属性可引用 <m ...

  3. python魔法方法大全

    1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...

  4. Python 函数修饰符(装饰器)的使用

     Python 函数修饰符(装饰器)的使用 1.  修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计, ...

  5. CHAPTER 40 Science in Our Digital Age 第40章 我们数字时代的科学

    CHAPTER 40 Science in Our Digital Age 第40章 我们数字时代的科学 The next time you switch on your computer, you ...

  6. AI入门课程资源

    企业 kaggle https://www.kaggle.com/learn/overview Google   介绍 https://developers.google.cn/machine-lea ...

  7. JAVA第一次实验 ——凯撒密码的实现

    JAVA实验一   编写程序实现凯撒密码 201352330 潘俊洋 一.实验说明 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加 ...

  8. Task 6.3 冲刺Two之站立会议1

    今天是二次冲刺的第一天,由于第一阶段已经大概完成了软件的主体功能和框架,我主要看了一下同学们提出的视频和音质的问题,想办法做出了相应的改善.另外我们的功能还是比较单一的,要对主界面进行一定的扩充,所以 ...

  9. python learning Process and Thread.py

    # 多进程 # Windows下面没有fork ,请在linux下跑下面的代码 import os print('Process (%s) start...' % os.getpid()) pid = ...

  10. C++操作mysql方法总结(1)

    C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...