虽然样例可以过,但是全WA了……
但这样也就算了,真正让人摸不着头脑的是,我下了一组数据之后,发现这就是样例……
求各路大佬们帮帮彻底懵逼的蒟蒻吧
蟹蟹!
#include<bits/stdc++.h>
#define MAX 1000
using namespace std;
bool vis[MAX+5];
double dis[MAX+5];
struct Edge
{
int to,c,f;
double val;
};
vector<Edge> G[MAX + 5];
struct cmp
{
bool operator() (Edge x,Edge y)
{
return x.val<y.val;
}
};
priority_queue<Edge,vector<Edge>,cmp> q;
void dij(int s,int n)
{
for(int i=1;i<=n;i++)
{
vis[i]=false;
dis[i]=0;
}
dis[s]=0;
Edge now,nxt;
now.to=s;
now.val=0;
q.push(now);
while(!q.empty())
{
now=q.top();
q.pop();
if(vis[now.to])
continue;
vis[now.to]=true;
for(int i=0;i<G[now.to].size();i++)
{
nxt=G[now.to][i];
if((double)min(now.f,nxt.f) / (now.c+nxt.c) > dis[nxt.to])
{
dis[nxt.to]=(double)min(now.f,nxt.f) / (now.c+nxt.c);
nxt.f=min(now.f,nxt.f);
nxt.c=(now.c+nxt.c);
now.val=dis[nxt.to];
q.push(nxt);
}
}
}
}
int main()
{
int n, m ;
cin>>n>>m;
Edge now;
int u,v;
while(m--)
{
cin >> u >> now.to >> now.c >> now.f;
now.val=now.f/now.c;
G[u].push_back(now);
v=now.to;
now.to=u;
G[v].push_back(now);
}
dij(1, n);
int ans=floor(dis[n]*1000000);
cout<<ans<<endl;
return 0;
}