题意:
给你一张n个点的无重边的无向图,并给出相应的点权和边权,定义答案为v为点值之和,e为边值之和,问如何取点能使答案最大(这里点取好了对应的边也就必须取,所以我们不必取边)。
思路:
想了半天如何取点,发现解决不了。那么我们换个思路,来选边。如果选择一条边,那么肯定能得到两个点的值,如果选择两条边,那么只能得到三个点的值,所以我们发现如果多选择一条边反而比选择少一点边的还不划算,所以我们最好的就是只选一条边。
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=505;
int n,m,a,b;
double v[MAX],c;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lf",&v[i]);
}
double ans=0;
while(m--){
scanf("%d%d%lf",&a,&b,&c);
ans=max(ans,(v[a]+v[b])/c);
}
printf("%.15lf\n",ans);
return 0;
}