显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e4+10,INF=0x3f3f3f3f;
int n,m,maxf=-999;
struct Edge
{
int c,e,f;
};
vector<Edge> g[N];
double ans=-9.9;
bool vis[1005];
int d[1005];
void spfa(int s,int fm)
{
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
deque<int> q;
q.push_back(s);
vis[s]=true;
d[s]=0;
d[0]=0;
while(!q.empty())
{
int x=q.front();
q.pop_front();
vis[x]=0;
for(int i=0;i<g[x].size();i++)
{
int y=g[x][i].c,w=g[x][i].e,fl=g[x][i].f;
if (d[y]>d[x]+w&&fl>=fm)
{
d[y]=d[x]+w;
if(!vis[y])
{
if(!q.empty()&&d[y]<=d[q.front()]) q.push_front(y);
else q.push_back(y);
if(!q.empty()&&d[q.front()]>d[q.back()]) swap(q[0],q[q.size()-1]);
vis[y]=1;
}
}
}
}
}
int main()
{
freopen("pump.in","r",stdin);
freopen("pump.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,w,f1;
cin>>x>>y>>w>>f1;
g[x].push_back({y,w,f1}),g[y].push_back({x,w,f1});
maxf=max(maxf,f1);
}
for(int i=1;i<=maxf;i++)
{
spfa(1,i);
ans=max(ans,floor((i*1.0/d[n])*1000000));
}
printf("%.0f",ans);
return 0;
}