USACO Milk Routing /// 优先队列广搜
2024-09-06 04:05:58
题目大意:
在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 ;
}
最新文章
- css样式之border
- Android课程---关于GridView网格视图的学习
- Centos7-mqtt消息中间件mosquitto的安装和配置
- Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图
- copy-mutableCopy
- Highcharts下载与使用_数据报表图
- CNN计算过程
- BZOJ4424: Cf19E Fairy
- java7 java MethodHandle解析
- SQL Server 一句Sql把表结构全部查询出来
- phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码
- Android使用Xutil3.0下载文件.md
- Devexpress 百分号显示格式
- MVC部分视图
- 浏览器地址栏运行JavaScript代码
- golang 实现轻量web框架
- 20155215 2016-2017-2 《Java程序设计》第4周学习总结
- 【BZOJ1221】【HNOI2001】软件开发 [费用流]
- apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析
- JavaScript处理数据完成左侧二级菜单的搭建