int n,m,tot,visit[1005],val[1005];
int head[1005],nxt[5005],to[5005],w[5005];
double eps=1e-4,dis[1005];
void add(int a,int b,int c){
nxt[++tot]=head[a];
head[a]=tot;
to[tot]=b;
w[tot]=c;
}
bool dfs_spfa(int x,double mid){
visit[x]=1;
for(int i=head[x];i;i=nxt[i]){
int y=to[i];
if(dis[y]>dis[x]-val[x]+mid*w[i]){
dis[y]=dis[x]-val[x]+mid*w[i];
if(visit[y]||dfs_spfa(y,mid))
return 1;
}
}
visit[x]=0;
return 0;
}
bool check(double mid){
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++)dis[i]=0;
for(int i=1;i<=n;i++)
if(dfs_spfa(i,mid))return 1;
return 0;
}
int main(){
n=read();m=read();
for(int i=1;i<=n;i++)val[i]=read();
for(int i=1;i<=m;i++){
int a=read(),b=read(),c=read();
add(a,b,c);
}
double l=-1e9,r=1e9,mid;
while(l+eps<r){
mid=(l+r)/2.0;
if(check(mid))l=mid;
else r=mid;
}
printf("%.2lf\n",l);
return 0;
}
[USACO07DEC]观光奶牛Sightseeing Cows
原文:https://www.cnblogs.com/PPXppx/p/10367298.html