开学能力测试t2 删点游戏
2018-03-05 21:31
417 查看
问题 : 删点游戏(graph)
时间限制: 1 Sec 内存限制: 128 MB提交: 20 解决: 12
[提交][状态][讨论版][命题人:sxz]
题目描述
LYK有一张n个点m条边组成的带点权和边权的无向简单图(没有重边和自环)。LYK为了学习关于图论的知识,它决定玩一个游戏。这个游戏是这样的。每一次,LYK可以选择在图中的点的任意一个点,并把这个点与这个点相连的边全部删除,得到一张新的图。
LYK可以执行这个删除操作若干次,直到它想让这个游戏停止为止。但这个游戏停止需要满足一个条件,剩下的点两两之间都是可达的,并且至少有2个点。
当LYK结束这个游戏时,LYK会获得一个欢乐值,这个欢乐值定义为这张图剩下的点权和与边权和的比。LYK想让最后得到的欢乐值最大。特别地,如果无法结束这个游戏,LYK将会获得0点欢乐值。你能帮帮它吗?
输入
一开始有两个数n,m,如题意所示。第二行有n个数ai表示这个图中第i个点的点权。
接下来有m行每行三个数u,v,z(1<=u,v<=n,且u!=v),表示一条连接u,v的边权为z的边。
输出
你需要输出LYK停止游戏时能得到的最大的欢乐值,保留小数点后两位数字。样例输入
3 32 3 42 3 51 2 31 3 4
样例输出
1.67
提示
样例解释删除编号为3的点。
对于20%的数据n=2
对于50%的数据n<=5
对于100%的数据1<=n,m<=100000,1<=ai,z<=1000,且输入均为正整数。
初看题目可能无从下手,甚至可能想到爆搜。但是毫无疑问肯定超时,所以想到在纸上模拟。
可以模拟出结论,最后取到的肯定是一条边和两个点。下面给出证明。
利用糖水不等式:
糖水不等式,顾名思义是喝糖水时得出的不等式(逃
你有一杯贼浓的糖水,以及一杯贼淡的糖水。根据生活经验,肯定能得出混合两杯糖水浓度肯定比第一杯要淡。
假设第一杯的浓度为(a/b)=k1,第二杯的浓度为(c/d)=k2,k1<k2,那么就有((a+c)/(b+d))<k1。
证明很简单:
设k2*x=k1,那么(c*x/d)=k1。
根据合分比定理,有((a+c*x)/(b+d))=k1。
由于x=k1/k2>1,则有((a+c)/(b+d))<k1。
证毕。
于是可以得到无论有多少条边,取得必定是一条边和两个顶点中比值最大的一条。下面给出代码。#include <iostream>
#include <cstdio>
using namespace std;
int p[100009];
float maxn(float a,float b){return a<b?b:a;}
int main()
{
int n,m,a,b,c;
float ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)scanf("%d",p+i);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
ans=maxn(ans,((p[a]+p[b])*1.0/c));
}
printf("%.2f",ans);
return 0;
}
相关文章推荐
- 第4周项目3:随机数函数应用于游戏-小学生算术能力测试系统
- 测试反应能力游戏
- 测试反应能力游戏
- 第11周扩展游戏-小学生计算能力测试系统
- 第四周项目3-随机函数应用于游戏(2)小学生算数能力测试系统
- 第四周上机实践项目 项目3--随机函数应用游戏(2)小学算数能力测试系统
- 第4周项目3-随机数函数应用于游戏(小学生算数能力测试系统)
- 开学能力测试t4 吃零食
- 第四周项目3-随机函数应用于游戏(2)小学生算数能力测试系统
- 第四周项目三-随机数函数应用于游戏(小学生算术能力测试系统)
- Python 与游戏测试 (小工具篇)
- 测试游戏时音效出现问题的原因
- 关于软件测试人员能力模型的建立(from知乎)
- 心理测试你的选择:测试你的赚钱能力有多强
- 游戏测试三部曲——问自己的三个问题
- 测试了一个游戏的代码
- Android测试游戏帧数的方法
- 20161020测试T2 解题报告(8)——rect
- 优秀软件测试工程师必备的8个能力!-(附思维导图) 推荐
- 谁有m55啊?帮忙测试一下我的这个游戏是否能在m55上运行。高分相送!