[USACO12DEC]牛奶的路由Milk Routing
时间:2019-09-21
本文章向大家介绍[USACO12DEC]牛奶的路由Milk Routing,主要包括[USACO12DEC]牛奶的路由Milk Routing使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
洛咕
题意:农民约翰的农场有一套老旧的管网,管网由M条管道(1<=M<=500)构成,用于将牛奶从谷仓运到储奶罐.他想在明年移除和更新大部分管道,但他想原封不动地保留一条完整的路径,这样他仍然可以把牛奶从谷仓输送到储罐.管网由N个节点(1<=N<=500)组成,每个点都可以作为一组管道的端点.结点1是谷仓,结点N是储罐。M条双向管道中的每一条都连接一对节点,并且都有一个延迟值(牛奶达到管的另一端的用时)和容量值(单位时间内可以稳定通过管道的牛奶量)。多条管道可以连接同一对节点.对于一条连接谷仓与储罐的路径,路径的延迟等于沿途所有管道的延迟之和,路径的容量等于沿途管道最小的容量(因为这是制约牛奶运送的“瓶颈”).如果约翰通过一条延迟为L、容量为C的管道运送X个单位的牛奶,需要的时间为L+X/C.给出约翰的管网结构,请帮助他选择一条路径,使得他从谷仓到储罐运送X个单位牛奶的总时间最少.
分析:刚开始看题面还以为是网络流呢,然后问题随机一转?就是一道最短路题了.有点像通往奥格瑞玛的道路,但是这题还容易些,不需要二分答案,而是直接枚举最小容量即可.枚举最小容量之后跑最短路即可.
#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;
}
原文地址:https://www.cnblogs.com/PPXppx/p/11562925.html
- 【Go 语言社区】 golang 算法课程 第一季 第2节 洗牌算法
- 一条update语句的优化探索(r9笔记第80天)
- OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
- Java基础-day03-代码题
- mongodb11天之屠龙宝刀(九)js函数入门:MongoDB基于js的数据类型修改
- Go语言社区 APP --问答模块数据存储流程及代码
- Java基础-day09-重构随机点名器
- OpenCV3.4两种立体匹配算法效果对比
- 文件操作常用函数
- Java基础-day09-对象;类;封装 学生管理系统
- two Pass方法连通域检测
- 【Java入门提高篇】Day14 Java中的泛型初探
- 使用shell脚本快速得到主备关系(r9笔记第93天)
- 【Java入门提高篇】Day13 Java中的反射机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 从零开始学习华为路由交换 | OSPF修改计时器
- 【没落的985/211】Python爬取知乎8万字回答进行高校分析
- LinkedBlockingQueue源码学习
- 三歪吐血总结了各个中间件是如何实现持久化的
- ThreadPoolExecutor源码学习
- Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
- 干的想喝水,一篇文章带你读懂硬盘工作原理!
- 微信小程序开发实战(11):滚动组件(picker)
- Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署
- 思科模拟器GNS3将路由器变成交换机的方法
- docker安装nginx并配置https
- Docker Swarm集群部署lnmp+redis
- Maven快速入门
- TomCat安装及快速部署
- SpringCloud+MyBatis分页处理(前后端分离)