题:天路
WA码:
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
const double eps=1e-3;
double dis[10001];
bool inq[10001];
struct node{
int v,f,t;
};
vector<node>edge[10001];
bool spfa(int s,double ans){
queue<int>q;
dis[s]=0;
q.push(s);
inq[s]=1;
int cnt[10001]={1};
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=0;
if(cnt[u]>n) return 1;
for(auto [v,f,t]:edge[u]){
double w=t*ans-f;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
cnt[v]=cnt[u]+1;
if(!inq[v]){
q.push(v);
inq[v]=1;
}
}
}
}
return 0;
}
int main(){
cin>>n>>m;
double l=0,r=1000.0;
for(int i=1;i<=m;i++){
int u,v,v1,p1;
cin>>u>>v>>v1>>p1;
edge[u].push_back({v,v1,p1});
}
while(l+eps<r){
double mid=(l+r)/2.0;
for(int i=0;i<=n;i++){
dis[i]=1e9;
inq[i]=0;
}
if(spfa(0,mid)) l=mid;
else r=mid;
}
if(l==0) printf("-1\n");
else printf("%.1f\n",r);
return 0;
}
他为什么都是-1啊,QWQ
验证码m2b6祭