题目大意:

在n个点 m条边的无向图中 需要运送X单位牛奶

每条边有隐患L和容量C 则这条边上花费时间为 L+X/C

求从点1到点n的最小花费

优先队列维护 L+X/C 最小 广搜到点n

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int N=+;
const int mod=1e9+; int n,M;
LL X;
struct NODE {
int u,v; LL L,C;
bool operator <(const NODE& p) const {
return (double)L+(double)X/C > (double)p.L+(double)X/p.C;
}
};
vector<NODE>G[]; int main()
{
while(~scanf("%d%d%lld",&n,&M,&X)) {
inc(i,,n) G[i].clear();
inc(i,,M) {
int u,v; LL l,c;
scanf("%d%d%lld%lld",&u,&v,&l,&c);
G[u].push_back({u,v,l,c});
G[v].push_back({v,u,l,c});
}
LL ans;
priority_queue <NODE> q;
while(!q.empty()) q.pop();
q.push({,,,INF});
while(!q.empty()) {
NODE e=q.top(); q.pop();
if(e.v==n) {
ans=e.L+X/e.C; break;
}
int len=G[e.v].size()-;
inc(i,,len) {
NODE t=G[e.v][i];
if(t.v==e.u) continue;
q.push({e.v,t.v,e.L+t.L,min(e.C,t.C)});
}
}
printf("%lld\n",ans);
} return ;
}

最新文章

  1. css样式之border
  2. Android课程---关于GridView网格视图的学习
  3. Centos7-mqtt消息中间件mosquitto的安装和配置
  4. Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图
  5. copy-mutableCopy
  6. Highcharts下载与使用_数据报表图
  7. CNN计算过程
  8. BZOJ4424: Cf19E Fairy
  9. java7 java MethodHandle解析
  10. SQL Server 一句Sql把表结构全部查询出来
  11. phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码
  12. Android使用Xutil3.0下载文件.md
  13. Devexpress 百分号显示格式
  14. MVC部分视图
  15. 浏览器地址栏运行JavaScript代码
  16. golang 实现轻量web框架
  17. 20155215 2016-2017-2 《Java程序设计》第4周学习总结
  18. 【BZOJ1221】【HNOI2001】软件开发 [费用流]
  19. apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析
  20. JavaScript处理数据完成左侧二级菜单的搭建

热门文章

  1. rabbitmq-5-案例1-简单的案例
  2. java并发编程之美-阅读记录4
  3. Codeforces 1101D 点分治
  4. 进程启动到别的session下(作用)
  5. oracle 中||
  6. dosbox下载并配置BC3.1及环境变量的方法
  7. EL属性范围用法sessionScope等(转)
  8. iOS项目开发中的知识点与问题收集整理②
  9. 【leetcode】925.Long Pressed Name
  10. Git分支,合并,切换分支的使用