这种马蜂好看吗??
同学都说丑
#include<bits/stdc++.h>
#define re register
#define il inline
#define ll long long
#define db double
#define MAXL 1005
#define MAXP 5005
#define Eps 1e-5
#define rep(i,a,b) for(re int i = a;i <= b;++ i)
#define Rep(i,a,b) for(re int i = a;i < b;++ i)
#define drep(i,a,b) for(re int i = a;i >= b;-- i)
#define Drep(i,a,b) for(re int i = a;i > b;-- i)
#define star(i,x) for(re int i = head[x];i;i = e[i].nxt)
#define fin(a) freopen(#a".in","r",stdin)
#define fout(a) freopen(#a".out","w",stdout)
using namespace std;
il int read(){
int x = 0;
char ch = 0;
while(!isdigit(ch))
ch = getchar();
while(isdigit(ch)){
x = (x << 3) + (x << 1) + (ch ^ 48);
ch = getchar();
}
return x;
}
il void write(int x){
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
struct edge{
int to,nxt,w;
db sc;
}e[MAXP << 1];
int N,P,F[MAXL];
db dis[MAXL];
db L = 0,R = 100000,ans = 0;
int head[MAXL],cnt = 0;
bool vis[MAXL];
il void add(int u,int v,int w){
e[++ cnt].to = v;
e[cnt].w = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
il bool Spfa(int s){
vis[s] = 1;
star(i,s){
int v = e[i].to;
if(dis[v] > dis[s] + e[i].sc){
dis[v] = dis[s] + e[i].sc;
if(vis[v] || Spfa(v)){
vis[v] = 0;
return 1;
}
}
}
vis[s] = 0;
return 0;
}
il void Trans(db x){
rep(i,1,cnt){
int v = e[i].to,w = e[i].w;
e[i].sc = (db) w * x - F[v];
}
return;
}
il bool Check(){
rep(i,1,N)
if(Spfa(i))
return 1;
return 0;
}
int main(){
#ifndef ONLINE_JUDGE
fin(2868);
fout(2868);
#endif
N = read();
P = read();
rep(i,1,N)
F[i] = read();
rep(i,1,P){
int u = read(),v = read(),w = read();
add(u,v,w);
}
while(R - L > Eps){
db mid = (L + R) / 2.0;
Trans(mid);
if(Check()){
ans = mid;
L = mid;
}
else
R = mid;
}
printf("%.2f",ans);
return 0;
}