题目传送门

话说这道题不分析样例实在是太亏了...结论题啊...

但是话说回来不知道它是结论题的时候会不会想到猜结论呢...毕竟样例一、二都有些特殊。

观察样例发现选中的子图都只有一条边。

于是猜只有一条边的时候解最优。

飞快地写个暴力,然后和结论对拍,然后假装这个结论是对的,然后就$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$为起点的算过了。

但是反正是拿来写对拍嘛,节约考试时间。

 #include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define N 505
#define ll long long
int n,m;
int a[N];
bool vis[N];
double ans=0.0;
vector<pair<int,int> >G[N];
int rd()
{
int f=,x=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+(c^);c=getchar();}
return f*x;
}
void dfs(int u,int d,int b)
{
for(int i=;i<G[u].size();i++)
{
int v=G[u][i].first;
if(vis[v]) continue;
vis[v]=;
int tmp=;
for(int j=;j<G[v].size();j++)
if(vis[G[v][j].first]) tmp+=G[v][j].second;
dfs(v,d+a[v],b+tmp);
vis[v]=;
}
if(b==) return ;
ans=max(ans,1.0*d/b);
}
int main()
{
n=rd(),m=rd();
for(int i=;i<=n;i++)
a[i]=rd();
for(int i=;i<=m;i++)
{
int u=rd(),v=rd(),w=rd();
G[u].push_back(make_pair(v,w));
G[v].push_back(make_pair(u,w));
}
for(int i=;i<=n;i++)
{
vis[i]=;
dfs(i,a[i],);
vis[i]=;
}
printf("%.9f\n",ans);
return ;
}
//不分析样例真的是个不好的习惯啊

Code

正解程序:(比暴力好写)

 #include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define N 505
#define ll long long
int n,m;
int a[N];
double ans=0.0;
int rd()
{
int f=,x=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+(c^);c=getchar();}
return f*x;
}
int main()
{
n=rd(),m=rd();
for(int i=;i<=n;i++)
a[i]=rd();
for(int i=;i<=m;i++)
{
int u=rd(),v=rd(),w=rd();
ans=max(ans,1.0*(a[u]+a[v])/w);
}
printf("%.9f\n",ans);
return ;
}

Code

CF444A DZY Loves Physics【结论】的更多相关文章

  1. cf444A DZY Loves Physics

    A. DZY Loves Physics time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. Codeforces 444A DZY Loves Physics(图论)

    题目链接:Codeforces 444A DZY Loves Physics 题目大意:给出一张图,图中的每一个节点,每条边都有一个权值.如今有从中挑出一张子图,要求子图联通,而且被选中的随意两点.假 ...

  3. CF 444C DZY Loves Physics(图论结论题)

    题目链接: 传送门 DZY Loves Chemistry time limit per test1 second     memory limit per test256 megabytes Des ...

  4. Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题

    A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...

  5. CodeForces 444C. DZY Loves Physics(枚举+水题)

    转载请注明出处:http://blog.csdn.net/u012860063/article/details/37509207 题目链接:http://codeforces.com/contest/ ...

  6. BZOJ3570 : DZY Loves Physics I

    考虑两个质量均为m,速度分别v1.v2的小球发生完全弹性碰撞的影响: 由动能守恒得: $\frac{1}{2}mv_1^2+\frac{1}{2}mv_2^2=\frac{1}{2}mv_1'^2+\ ...

  7. 【权值分块】bzoj3570 DZY Loves Physics I

    以下部分来自:http://www.cnblogs.com/zhuohan123/p/3726306.html 此证明有误. DZY系列. 这题首先是几个性质: 1.所有球质量相同,碰撞直接交换速度, ...

  8. 【Codeforces 444A】DZY Loves Physics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 两个点的子图他们的"密度"是比所有联通生成子图都要大的 "只要胆子大,遇到什么问题都不怕!" [代码] ...

  9. @codeforces - 444A@ DZY Loves Physics

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 边的图,边有边权,点有点权. 找到一个连通 ...

随机推荐

  1. 洛谷P1140 相似基因【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...

  2. [AngularJS] Decorator pattern for code reuse

    Imaging you have a large application, inside this large application you have many small individual a ...

  3. 无法安装 Composer 怎么办?

    详细方法参见 http://pkg.phpcomposer.com/ 下载 composer.phar ,放置到项目中 在同目录中执行命令行 echo @php "%~dp0composer ...

  4. HDU 6057 - Kanade's convolution | 2017 Multi-University Training Contest 3

    /* HDU 6057 - Kanade's convolution [ FWT ] | 2017 Multi-University Training Contest 3 题意: 给定两个序列 A[0 ...

  5. 原型模式(Prototype)---创建型

    1 基础知识 定义:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.特征:不需要知道任何创建的细节,不调用构造方法.本质:克隆生成对象. 原型模式会要求对象实现一个可以“克隆”自身的接口 ...

  6. 「BZOJ 4565」「HAOI 2016」字符合并「区间状压DP」

    题意 给一个长度为\(n(\leq 300)\)的\(01\)串,每次可以把\(k(\leq 8)\)个相邻字符合并,得到新字符和一定分数,最大化最后的得分 题解 考虑设计dp:\(dp[S][i][ ...

  7. jQuery系列(十二):事件委托

    1.什么是事件委托 通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...

  8. Python实用黑科技——解包元素(2)

    需求: 前面的文章讲的是使用变量的个数需要和迭代器数据变量的元素个数相同的方法,但更多的时候确实不想根据元素个数n来定义相应多的变量,而是希望用较少的变量( def drop_first_last(g ...

  9. premiere pro 2019 mac 破解

    链接:https://pan.baidu.com/s/14p1qj6pI1F3SP1SG4TUFHA  密码:seug

  10. AGC033D Complexity

    题意 给出一个\(n*m\)的\(0,1\)矩阵,若一个矩阵中的所有元素都相同,则这个矩阵的代价为\(0\),如果不是则选择一种将它分成两个子矩阵的方案,代价为所有方案中(两个子矩阵的代价的较大值+\ ...