LGOJ1264 K-联赛
这题其实不难想到
Description
题意太长了,概括不来,去题库里扫一眼吧(但是很好懂)
Solution
\]
考虑一个事情:每一个队伍的输局是没有用的
贪心一下,让每个队伍把剩下的比赛赢下来的时候,最有可能夺冠
设最终当前队赢得的场数的 \(maxx\)
接下来我们考虑让剩下的比赛怎么胜负
非这个队在剩下的比赛中的最大胜场数不得大于 \(maxx-w_j\) ,其中$j \in[1,n] $且 \(j!=i\)
然后我们建图
每一场比赛都会让胜者的胜利场次加 \(1\) ,把 比赛的场次当成一个点,队伍当成一个点
每场比赛向队伍分别连边,边权为 \(1\) ,源点向 比赛场次连,然后队伍向汇点连
跑网络流就行了(或者这玩意就是个二分图完美匹配??)
\]
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define cl(x) memset(x, 0, sizeof(x))
namespace yspm {
inline int read() {
int res = 0, f = 1;
char k;
while (!isdigit(k = getchar()))
if (k == '-')
f = -1;
while (isdigit(k)) res = res * 10 + k - '0', k = getchar();
return res * f;
}
int n, s, t, tot;
const int N = 1e4 + 10;
int head[N], w[N], a[N][N], id[N][N], dep[N], cnt = 1;
struct node {
int nxt, to, lim;
} e[N << 1];
inline void add2(int u, int v, int w) {
e[++cnt].lim = w;
e[cnt].nxt = head[u];
e[cnt].to = v;
return head[u] = cnt, void();
}
inline void add1(int u, int v, int w) {
add2(u, v, w);
add2(v, u, 0);
return;
}
queue<int> q;
inline bool bfs() {
cl(dep);
dep[s] = 1;
q.push(s);
while (q.size()) {
int fr = q.front();
q.pop();
for (int i = head[fr]; i; i = e[i].nxt) {
int t = e[i].to;
if (!dep[t] && e[i].lim)
dep[t] = dep[fr] + 1, q.push(t);
}
}
return dep[t];
}
inline int dfs(int now, int in) {
if (now == t)
return in;
for (int i = head[now]; i && in; i = e[i].nxt) {
int t = e[i].to;
if (!e[i].lim || dep[t] != dep[now] + 1)
continue;
int res = dfs(t, min(e[i].lim, in));
e[i].lim -= res;
e[i ^ 1].lim += res;
if (res)
return res;
}
return 0;
}
inline void solve(int x) {
cl(head);
cnt = 1;
cl(e);
int maxx = w[x], tmp = 0;
for (int i = 1; i <= n; ++i) maxx += a[x][i];
for (int i = 1; i <= n; ++i) {
if (i == x)
continue;
if (w[i] > maxx)
return;
add1(i, t, maxx - w[i]);
for (int j = 1; j < i; ++j) {
if (j != x && a[i][j]) {
add1(s, id[i][j], a[i][j]), tmp += a[i][j];
add1(id[i][j], i, a[i][j]);
add1(id[i][j], j, a[i][j]);
}
}
}
int sum = 0, d;
while (bfs()) {
while (d = dfs(s, 1e15 + 10)) sum += d;
}
if (sum == tmp)
printf("%lld ", x);
return;
}
signed main() {
n = read();
s = n + 1, t = n + 2, tot = n + 2;
for (int i = 1, k; i <= n; ++i) w[i] = read(), k = read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j) a[i][j] = read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j < i; ++j) id[i][j] = ++tot;
for (int i = 1; i <= n; ++i) solve(i);
puts("");
return 0;
}
} // namespace yspm
signed main() { return yspm::main(); }
格式化了,代码很好懂
LGOJ1264 K-联赛的更多相关文章
- 用原始方法解析复杂字符串,json一定要用JsonMapper么?
经常采集数据,肯定会碰到解析字符串,包括整个页面的html,或者json以及一些不标准的json格式... 以前用json序列化,有时候需要实体类,有的时候没有,比较麻烦,听说可以用JsonMappe ...
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- 使用 Python 抓取欧洲足球联赛数据
Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
- Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组
1138 聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...
- Codevs 1217 借教室 2012年NOIP全国联赛提高组
1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在大学期间,经常需要租借教 ...
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...
- Codevs 1140 Jam的计数法 2006年NOIP全国联赛普及组
1140 Jam的计数法 2006年NOIP全国联赛普及组 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Jam是个喜欢标 ...
- 【Never Stop】联赛集训记录
始于10/01/2017. Day I: T2图论,没想到.T3谜一样DP(是从来没意识到还可以这样). rank10. 下午刷了点题,CDQ也只打出一个板子,感觉自己不在状态? ========== ...
随机推荐
- JAVA - Intellij IDEA 中去掉mybatis Mapper.xml背景色
JAVA - Intellij IDEA 中去掉mybatis Mapper.xml背景色 1:现在公司中使用mybatis的频率非常高,一般都会用MBG来生成基础的代码文件.在intellij中查看 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 数组
C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比如 number0. ...
- junit基础学习之-测试service层(3)
测试步骤: 在之前的文章中已经加了junit的环境,这就不需要了. 1.加载junit类,spring配置文件,指明junit测试器,@Runwith 2.定义变量,service,不可以使用spri ...
- Mac使用安卓模拟器-网易MuMu
先看下效果图 近期,因为小编把安卓手机倒手了,但现在还想看看一些安卓应用.所以就搜罗了很多市场上的模拟器. 最终选定了网易的MuMu,总体感觉网易也是花了很大的心思,整体效果超赞. 下载地址 网易Mu ...
- 2020牛客寒假算法基础集训营5 部分题解(BDEH)
B: 牛牛战队的比赛地(二分做法)题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小. 思路:我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆 ...
- exgcd详解
注:本文中所有 \(\%\) 号均表示取模, \(gcd(a,b)\) 表示 \(a\) 和 \(b\) 的最大公因数 1.exgcd是什么? exgcd大名扩展欧几里得算法,用来求形如 \(gcd( ...
- Oracle学习笔记(1)
1.常用sqlplus命令 (1)查看当前登录用户:show user; (2)切换当前登录用户:conn 用户名/密码 (切换系统用户+as sysdba ); (3)断开当前登录用户:disc; ...
- Spring中的注解——@nullable和@notnull
@nullable和@nutNull 在写程序的时候你可以定义是否可为空指针.通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的.现代的编译器.I ...
- GTK入门
环境准备 官网下载 GTK 源码包,因为本机 GLib 版本不够,下载一个非最新版的 GTK3.8.0 先学习用 直接阅读 "/gtk+-3.8.0/docs/reference/gtk/h ...
- MyBatis 关联查询的实现:多对多
2个实体:订单.商品,一个订单可以包含多种商品,同时一种商品可以属于多个订单,即多对多. 商品表goods_tb: 订单表order_tb: no是订单编号,user_id与用户表的id关联. 需要新 ...