期望得分:100+100+100=300

实际得分:100+100+100=300

 

T1 一道图论好题(graph)

Time Limit:1000ms   Memory Limit:128MB

 

题目描述

LYK有一张无向图G={V,E},这张无向图有n个点m条边组成。并且这是一张带权图,不仅有边权还有点权。

LYK给出了一个子图的定义,一张图G’={V’,E’}被称作G的子图,当且仅当

·G’的点集V’包含于G的点集V。

·对于E中的任意两个点a,b∈V’,当(a,b)∈E时,(a,b)一定也属于E’,并且连接这两个点的边的边权是一样的。

LYK给一个子图定义了它的价值,它的价值为:点权之和与边权之和的比。

LYK想找到一个价值最大的非空子图,所以它来找你帮忙啦。

输入格式(graph.in)

    第一行两个数n,m表示一张n个点m条边的图。

    第二行n个数ai表示点权。

    接下来m行每行三个数u,v,z,表示有一条连接u,v的边权为z的无向边。数据保证任意两个点之间最多一条边相连,并且不存在自环。 

 

输出格式(graph.out)

你需要输出这个价值最大的非空子图的价值,由于它是一个浮点数,你只需要保留小数点后两位有效数字。

 

输入样例

3 3

2 3 4

1 2 3

1 3 4

2 3 5

 

输出样例

1.67

 

样例解释

选择1,2两个点,则价值为5/3=1.67。

 

对于20%的数据n=2

对于50%的数据n<=5

对于100%的数据1<=n,m<=100000,1<=ai,z<=1000。

 

最优解一定是一条边+两个点

考场上是二分答案,然后枚举所有的边,只要有一个满足点-边*答案>=0 就return true

std直接 ans=max(ans,(a[A]+a[B])/(C+0.0));

#include<cmath> 
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 100001
using namespace std;
int n,m;
int point[N];
struct node
{
    int u,v,w;
}e[N];
const double eps=1e-4;
void read(int &x)
{
    x=0; char c=getchar();
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}
bool check(double k)
{
    for(int i=1;i<=m;i++)
        if(point[e[i].u]+point[e[i].v]-k*e[i].w>=0) return true; 
    return false;
}
int main()
{
    freopen("graph.in","r",stdin);
    freopen("graph.out","w",stdout);
    read(n); read(m);
    int maxn=0;
    for(int i=1;i<=n;i++) 
    {
        read(point[i]);
        maxn=max(maxn,point[i]);
    }
    int minn=1e9;
    for(int i=1;i<=m;i++)
    {
        read(e[i].u); read(e[i].v); read(e[i].w);
        minn=min(minn,e[i].w);
    }
    double l=0,r=maxn*2*1.0/minn,mid,ans;
    while(fabs(r-l)>eps)
    {
        mid=(l+r)/2;
        if(check(mid)) ans=mid,l=mid+eps;
        else r=mid-eps;
    }
    printf("%.2lf",ans);
}
View Code

相关文章:

  • 2021-07-30
  • 2021-10-25
  • 2021-12-02
  • 2022-02-13
  • 2021-10-29
  • 2021-11-04
  • 2021-09-13
  • 2021-07-22
猜你喜欢
  • 2021-10-12
  • 2022-02-04
  • 2021-07-14
  • 2022-02-08
  • 2021-07-30
  • 2022-02-11
  • 2021-11-13
相关资源
相似解决方案