Codeforces 444A DZY Loves Physics(贪心,数学)

来源:互联网 发布:淘宝三天不发货怎么办 编辑:程序博客网 时间:2024/05/05 16:15

题目链接

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

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 of G' 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), wherexi 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 test(s)
Input
1 01
Output
0.000000000000000
Input
2 11 21 2 1
Output
3.000000000000000
Input
5 613 56 73 98 171 2 561 3 291 4 422 3 952 4 883 4 63
Output
2.965517241379311

题意:n个点的无向图。每个点有点权,边有边权。一个图的密度的定义为:

1,顶点只有一个,则密度为0

2,顶点大于1个,密度等于v/e,v为点权和,e为边权和。

求该图的所有子图中,最大的密度值。

题解:可以证明密度最大的子图,一定只有两个点。

假设一个图现在有两个点点权为v1,v2,他们之间相连的边的边权为m1,该图的密度为(v1+v2)/m1。如果增加一个点v3要让该图的密度增加,若v3与v2相连的边的边权为m2。那么只有与v3/m2>(v1+v2)/m1,该图的密度才会增加。但是此时,v2与v3两个点构成的子图的密度为(v2+v3)/m2>(v1+v2+v3)/(m1+m2)。所以密度最大的子图一定只有两个点。

#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<string>#include<stack>#include<math.h>#include<vector>#include<set>#include<map>#define nn 110000#define inff 0x3fffffff#define eps 1e-8#define mod 1000000007typedef long long LL;const LL inf64=LL(inff)*inff;using namespace std;int n,m;double a[510];int main(){    int i;    while(scanf("%d%d",&n,&m)!=EOF)    {        for(i=1;i<=n;i++)        {            scanf("%lf",&a[i]);        }        double ans=0;        int u,v;        double l;        for(i=1;i<=m;i++)        {            scanf("%d%d%lf",&u,&v,&l);            ans=max(ans,(a[u]+a[v])/l);        }        printf("%.10lf\n",ans);    }    return 0;}


0 0