@hdu - 5503@ EarthCup
@description@
n 个队伍两两之间比赛,保证没有平局。
现在给出 n 个队伍分别的获胜次数,询问这些数据是否合法。
Input
先给出 T(T≤50) 表示数据组数。
对于每组数据给出 n(n≤50000) 表示参赛队伍数。
接下来 n 行,第 i 给出一个整数 ai (0≤ai<n) 表示第 i 个队伍的获胜次数。
Output
对于每组数据,若不合法输出 "The data have been tampered with!",否则输出 "It seems to have no problem."。
Sample Input
2
3
2
1
0
3
2
2
2
Sample Output
It seems to have no problem.
The data have been tampered with!
Hint:
对于第一组数据,一种可能的情况是队伍 1 战胜队伍 2, 3,队伍 2 战胜队伍 3。
对于第二组数据,不难发现不存在一种可能的胜负情况。
@solution@
竞赛图的判定,有一个叫作兰道定理的东西。
但是我这里不详细讲兰道定理的一般证明方法,只提供我在网上看到的一个有趣的推导。
假如胜者向败者连边,则题目相当于给出竞赛图中所有点的出度,问是否存在合法的图。
考虑给无向完全图的边定向得到竞赛图,我们定向为 u->v 时,u 所需要的出度就会少 1。
这会让我们联想起混合图欧拉路中,也是通过给无向边定向调整入度出度。于是联想到网络流。
考虑如下的建模:
从 s 向 n*(n-1) 条边连容量为 1 的边;假如第 i 条边为 (u, v),则 i 向 u 和 v 各连一条容量为 1 的边;最后 n 个顶点向 t 连容量为 a[i] 的边。
假如这个网络流能够满流,则对应原题目中的合法。
但是显然我们直接跑是跑不了的,考虑怎么样才能直接判定。
如果我们将 n 个顶点每一个点拆成 a[i] 个点,则问题可以转为二分图完美匹配的判定性问题,于是就可以引入 hall 定理。
考虑从左边选出一个集合对应的右边的邻集意义是什么,不难发现其实是从原图中选出一个边集,每条边连接的原图中的点的集合。
hall 定理要求邻集必须比当前集合大。反过来,我们考虑给定一个邻集(即对应原图中的点集),能够得到的最大的当前集合有多大——其实就是边集在原图中形成完全图时最大。
于是,我们可以在本题中将 hall 定理等价地推为 \(\frac{|S|*(|S|-1)}{2} \le \sum_{i\in S}a[i]\),对于原图中任意一个点集 S 都要满足。
注意到左边只与 S 的大小有关,我们只需要考虑 S 同等大小的情况下 \(\sum_{i\in S}a[i]\) 的最小值。贪心地想这个最小值一定是 a 中前 |S| 小的加起来。
于是:只需要将 a 排好序,对于每一个 i,如果满足 a[1] + a[2] + ... + a[i] >= i*(i-1)/2 即有解。
当然因为要求完美匹配,所以左右大小应该相等,即应该有 a[1] + a[2] + ... + a[n] = n*(n-1)/2。
其实上面的判别式就是兰道定理。
@accepted code@
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 50000;
int a[MAXN + 5], n;
void solve() {
scanf("%d", &n);
for(int i=1;i<=n;i++)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
ll sum = 0;
for(int i=1;i<=n;i++) {
sum += a[i];
if( sum < 1LL*i*(i-1)/2 ) {
puts("The data have been tampered with!");
return ;
}
}
if( sum == 1LL*n*(n-1)/2 )
puts("It seems to have no problem.");
else puts("The data have been tampered with!");
}
int main() {
int T; scanf("%d", &T);
while( T-- ) solve();
}
@details@
至于兰道定理真正的证明。。。没有必要记吧。。。记忆一个 hall 定理已经够累了。。。
@hdu - 5503@ EarthCup的更多相关文章
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- hdu 4329
problem:http://acm.hdu.edu.cn/showproblem.php?pid=4329 题意:模拟 a. p(r)= R'/i rel(r)=(1||0) R ...
随机推荐
- Neo4j与ElasticSearch数据同步
Neo4j与ElasticSearch数据同步 针对节点删除,加了一些逻辑,代码地址 背景 需要强大的检索功能,所有需要被查询的数据都在neo4j. 方案 在Server逻辑中直接编写.后端有一个St ...
- CF 848C
听说,一个好的oier是题目喂出来的. 题目 给定长度为n的数组, 定义数字X在[l,r]内的值为数字X在[l,r]内最后一次出现位置的下标减去第一次出现位置的下标 给定m次询问, 每次询问有三个整数 ...
- 微服务开源生态报告 No.8
「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...
- HDU - 1724 Ellipse 自适应辛普森模板
OJ 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #include ...
- ylbtech-自信:自信
ylbtech-自信:自信 自信心(confidence),在心理学中,与其最接近的是班杜拉(A.Bandura)在社会学习理论中提出的自我效能感 (self-efficacy)的概念,是指个体对自身 ...
- SEO优化步骤
SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...
- intellij idea cpu占用率太大太满 运行速度太慢解决方案
1.关掉代码检查. setting -> Editor -> Inspections,把右面方框框里的对勾全去掉,或者根据需要去掉.原理是关闭不必要的代码检查,提高速度. 2.关掉多余的插 ...
- django 验证码(django-simple-captcha)
django 验证码(django-simple-captcha) django-simple-captcha 官方文档(含基于modelForm的用法) https://django-simple ...
- UE4碰撞规则详解
UE4的碰撞设置在官方的文档的 物理模拟模块(链接:点击打开链接).但是操作起来感觉坑还是比较多,所以这里总结一下,以防平时经常会漏掉或忽略某些条件.如果想看关于碰撞响应触发,可以参考链接( UE4蓝 ...
- openssl生成证书 - CSDN博客
大家都可以生成公钥.私钥对,无法确认公钥对到底是谁的. 如果能够确定公钥到底是谁的,就不会有这个问题了.例如,如果收到“黑客”冒充“服务器”发过来的公钥,经过某种检查,如果能够发现这个公钥不是“服务器 ...