【code force444A】DZY Loves Physics

来源:互联网 发布:超市收银软件网络版 编辑:程序博客网 时间:2024/06/10 15:02

DZY Loves PhysicsCrawling in process...

Crawling failedTime Limit:1000MS    Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

SubmitStatus

Description

Input

Output

Sample Input

Sample Output

Hint

Description

DZY loves Physics, and he enjoys calculating density.

Almost everything has density, even a graph. We define the density of a non-directed graph (nodes and edges of the graph have some values) as follows:

where v is the sum of the values of the nodes,e is the sum of the values of the edges.

Once DZY got a graph G, now he wants to find a connected induced subgraphG' of the graph, such that the density ofG' is as large as possible.

An induced subgraph G'(V', E') of a graphG(V, E) is a graph that satisfies:

  • ;
  • edge if and only if, and edge;
  • the value of an edge in G' is the same as the value of the corresponding edge inG, so as the value of a node.

Help DZY to find the induced subgraph with maximum density. Note that the induced subgraph you choose must be connected.

Input

The first line contains two space-separated integers n (1 ≤ n ≤ 500),. Integern represents the number of nodes of the graphG,m represents the number of edges.

The second line contains n space-separated integersxi (1 ≤ xi ≤ 106), where xi represents the value of thei-th node. Consider the graph nodes are numbered from1 to n.

Each of the next m lines contains three space-separated integersai, bi, ci (1 ≤ ai < bi ≤ n; 1 ≤ ci ≤ 103), denoting an edge between node ai andbi with valueci. The graph won't contain multiple edges.

Output

Output a real number denoting the answer, with an absolute or relative error of at most10 - 9.

Sample Input

Input
1 01
Output
0.000000000000000
Input
2 11 21 2 1
Output
3.000000000000000
Input
5 613 56 73 98 17 点的权值1 2 56    边的权值1 3 291 4 422 3 952 4 883 4 63
Output
2.965517241379311

Sample Output

Hint

In the first sample, you can only choose an empty subgraph, or the subgraph containing only node1.

In the second sample, choosing the whole graph is optimal.

题意:找最小连通子图,使得点权和/边权值和最大

题解:应用图论中的一个结论:最多两个点时,其比值可能达到最大,所以遍历两个点的边就可以了

          2个点的情况肯定比3个点的优。

假设有3个点a,b,c,权值分别为A,B,C
现a-b,b-c边的权值分别为u,v
那么对于两点的情况有A+Bu,B+Cv
假设有(A+B)/u≥(B+C)/v
对于三点来说(A+B+C)/u+v,有(A+B)v(B+C)u
比较A+B/uA+B+C/u+v,两边同乘u(u+v),得(A+B)/(u+v)(A+B+C)/ u                                                                                                                                                                                                               u
同减(A+B)u(A+B)vCu
因为(A+B)v(B+C)uCu


(v+a)/(e+b)  <=  v/e

假设存在最优解(G)ans最小边数>1,则点数>2

ans=∑vi/∑c 

由假设知对G的子图,(u+v)/c<ans ,(u+v)<ans*c

∴∑u+∑v<ans*∑c ,(∑u+∑v)/∑c<ans=∑vi/∑c

∴(∑u+∑v)<∑vi 矛盾

结论成立

code:

#include<cstdio>#include<algorithm>using namespace std;int main(){int n,m,a,b;double k;double val[500];while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++)scanf("%lf",&val[i]);//点的权值double ans=0;for(int i=0;i<m;i++){scanf("%d%d%lf",&a,&b,&k);    ans=max(ans,(val[a]+val[b])/k); }  printf("%.15lf\n",ans);}return 0; } 

0 0