标签:mil map front out namespace 网络 最小 max name
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define ll long long
using namespace std;
inline int read(){
int x=0,o=1;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')o=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*o;
}
const int N=505;
int n,m,x,ans=1e9,visit[N],dis[N],rl[N];
int tot,head[N],nxt[N<<1],to[N<<1],w1[N<<1],w2[N<<1];
inline void add(int a,int b,int c,int d){
nxt[++tot]=head[a];head[a]=tot;
to[tot]=b;w1[tot]=c;w2[tot]=d;
}
queue<int>q;
inline void spfa(int maxn){
for(int i=1;i<=n;++i)dis[i]=1e9,visit[i]=0;
q.push(1);visit[1]=1;dis[1]=0;
while(q.size()){
int u=q.front();q.pop();visit[u]=0;
for(int i=head[u];i;i=nxt[i]){
if(w2[i]<maxn)continue;//不符合最小容量要求
int v=to[i];
if(dis[v]>dis[u]+w1[i]){
dis[v]=dis[u]+w1[i];
if(!visit[v]){
visit[v]=1;
q.push(v);
}
}
}
}
}
int main(){
n=read(),m=read(),x=read();
for(int i=1;i<=m;++i){
int a=read(),b=read(),c=read(),d=read();
add(a,b,c,d);add(b,a,c,d);rl[i]=d;
}
sort(rl+1,rl+m+1);//从小到大排序,方便枚举
for(int i=1;i<=m;++i){
spfa(rl[i]);//跑最短路
ans=min(ans,dis[n]+(int)x/rl[i]);
}
printf("%d\n",ans);
return 0;
}
标签:mil map front out namespace 网络 最小 max name
原文地址:https://www.cnblogs.com/PPXppx/p/11562925.html