CF444A DZY Loves Physics【结论】
话说这道题不分析样例实在是太亏了...结论题啊...
但是话说回来不知道它是结论题的时候会不会想到猜结论呢...毕竟样例一、二都有些特殊。
观察样例发现选中的子图都只有一条边。
于是猜只有一条边的时候解最优。
飞快地写个暴力,然后和结论对拍,然后假装这个结论是对的,然后就$AC$了(大雾
还是证明一下这个结论吧:
用反证法。
设这样三个点的点权分别为$A$,$B$,$C$,两条边的边权为$n$,$m$
假设子图中有$A,B,C$三个点比只有两个点更优。
也就是三个点都选的答案比只选$AB$和只选$BC$都大。
三个都选的答案:$(A+B+C)/(n+m)$
只选$AB$:$(A+B)/m$
只选$BC$:$(B+C)/n$
则:
$$(A+B+C)/(n+m)>(A+B)/m$$
$$(A+B+C)/(n+m)>(B+C)/n$$
化简:(权都是正数)
$$(A+B+C)*m>(A+B)*(n+m)$$
$$(A+B+C)*n>(B+C)*(n+m)$$
$$↓$$
$$C*m>A*n+B*n$$
$$A*n>B*m+C*m$$
相加:
$$C*m+A*n>A*n+B*n+B*m+C*m$$
$0>B*n+B*m$
由于$B$和$n$,$m$都是正数,导出矛盾。
所以假设不成立。
另外,如果$AC$之间有连边的话,那三个都选肯定更不优,分子不变,分母变大了嘛。只选$AC$都不用讨论,至少在这种情况下三个都选干不过只选$AB$或$BC$。
暴力程序(拿来对拍)
有同学写的$2^n$枚举子集的暴力,我觉得略麻烦,还是更喜欢自己的(笑)
甚至还想优化一下自己的暴力,就是在以$1$以外的点为起点的时候,就不把$1$加进去,因为$1$有的状态已经在$1$为起点的算过了。
但是反正是拿来写对拍嘛,节约考试时间。
1 #include<cstdio> 2 #include<algorithm> 3 #include<vector> 4 #include<queue> 5 using namespace std; 6 #define N 505 7 #define ll long long 8 int n,m; 9 int a[N]; 10 bool vis[N]; 11 double ans=0.0; 12 vector<pair<int,int> >G[N]; 13 int rd() 14 { 15 int f=1,x=0;char c=getchar(); 16 while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();} 17 while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();} 18 return f*x; 19 } 20 void dfs(int u,int d,int b) 21 { 22 for(int i=0;i<G[u].size();i++) 23 { 24 int v=G[u][i].first; 25 if(vis[v]) continue; 26 vis[v]=1; 27 int tmp=0; 28 for(int j=0;j<G[v].size();j++) 29 if(vis[G[v][j].first]) tmp+=G[v][j].second; 30 dfs(v,d+a[v],b+tmp); 31 vis[v]=0; 32 } 33 if(b==0) return ; 34 ans=max(ans,1.0*d/b); 35 } 36 int main() 37 { 38 n=rd(),m=rd(); 39 for(int i=1;i<=n;i++) 40 a[i]=rd(); 41 for(int i=1;i<=m;i++) 42 { 43 int u=rd(),v=rd(),w=rd(); 44 G[u].push_back(make_pair(v,w)); 45 G[v].push_back(make_pair(u,w)); 46 } 47 for(int i=1;i<=n;i++) 48 { 49 vis[i]=1; 50 dfs(i,a[i],0); 51 vis[i]=0; 52 } 53 printf("%.9f\n",ans); 54 return 0; 55 } 56 //不分析样例真的是个不好的习惯啊
正解程序:(比暴力好写)
1 #include<cstdio> 2 #include<algorithm> 3 #include<vector> 4 #include<queue> 5 using namespace std; 6 #define N 505 7 #define ll long long 8 int n,m; 9 int a[N]; 10 double ans=0.0; 11 int rd() 12 { 13 int f=1,x=0;char c=getchar(); 14 while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();} 15 while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();} 16 return f*x; 17 } 18 int main() 19 { 20 n=rd(),m=rd(); 21 for(int i=1;i<=n;i++) 22 a[i]=rd(); 23 for(int i=1;i<=m;i++) 24 { 25 int u=rd(),v=rd(),w=rd(); 26 ans=max(ans,1.0*(a[u]+a[v])/w); 27 } 28 printf("%.9f\n",ans); 29 return 0; 30 }
原文地址:https://www.cnblogs.com/lyttt/p/11861148.html
- SharedPreferences 存List集合,模拟数据库,随时存取
- Servlet与Jsp的结合使用实现信息管理系统一
- Mac下nvm管理node.js版本问题
- 自定义tab吸顶效果一(原理)
- OpenGL ES学习001---绘制三角形
- Android之MaterialDesign应用技术2-仿支付宝上滑搜索框缓慢消失
- 披着狼皮的羊——寻找惠普多款打印机中的RCE漏洞
- Android之MaterialDesign应用技术
- 蛙啊!老母亲给你整理了DEDECMS漏洞集合,快回家!
- Android之Bmob移动后端云服务器
- golang基于redis lua封装的优先级去重队列
- Java设计模式总汇二(小白也要飞)
- Java设计模式总汇一
- Android数据绑定技术二,企业级开发
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux定时任务的一些相关操作汇总
- Linux nohup命令原理及实例解析
- 基于centos7快速安装mysql5.7教程解析
- Centos8下django项目部署 nginx+uwsgi的教程
- 3分钟短文:Laravel把数据验证的手伸向“请求体”
- 「Redis」字符串
- Elasticsearch:pipeline aggregation 介绍
- Qt音视频开发32-Onvif网络设置
- 3分钟短文:说说Laravel模型关联关系最单纯的“一对一”
- Redis 缓存性能实践及总结
- 如何优雅的在react-hook中进行网络请求
- Git commit emoji 食用指南
- 编译安装 ProtoBuf 扩展
- 一键搭建 KMS 服务
- vuepress-theme-yur 使用教程