洛谷 P1266 速度限制 题解
2024-09-05 09:04:24
这道题可以理解为是一个分层图,也可以理解为是二维的SPFA
dis[i][j]表示到达i这个点速度为j的最短路
然后跑已经死了的SPFA就好了;
#include <bits/stdc++.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int head[200010],cnt;
int inf=2e9+1;
class littlestar{
public:
int to;
int nxt;
int w;
int speed;
void add(int u,int v,int gg,int hh)
{
to=v;
nxt=head[u];
w=gg;
speed=hh;
head[u]=cnt;
}
}star[200010];
int n,m,T;
class node1{
public:
int u,speed;
};
double dis[301][501];
int vis[301][501];
node1 pre[301][501];
void SPFA()
{
queue<node1> qwq;
qwq.push((node1){0,70});
inc(i,0,n) inc(j,0,500) dis[i][j]=inf,pre[i][j].u=-1,pre[i][j].speed=-1;
dis[0][70]=0;
while(qwq.size()){
node1 tmp=qwq.front();
qwq.pop();
vis[tmp.u][tmp.speed]=0;
for(int i=head[tmp.u];i;i=star[i].nxt){
int v=star[i].to;
int now=star[i].speed;
if(!now) now=tmp.speed;
if(dis[tmp.u][tmp.speed]+(double)star[i].w/now<dis[v][now]){
dis[v][now]=dis[tmp.u][tmp.speed]+(double)star[i].w/now;
pre[v][now].u=tmp.u;
pre[v][now].speed=tmp.speed;
if(!vis[v][now]){
vis[v][now]=1;
qwq.push((node1){v,now});
}
}
}
}
}
int ans[3000];
int main()
{ cin>>n>>m>>T;
inc(i,1,m){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
star[++cnt].add(a,b,d,c);
}
SPFA();
double minn=999999999.9,id=0;
inc(i,0,500){
if(minn>dis[T][i]){
minn=dis[T][i];id=i;
}
}
int now=T,now2=id,cnt=0;
while(now!=-1){
ans[++cnt]=now;
int tmp=now2;
now2=pre[now][now2].speed;
now=pre[now][tmp].u;
}
for(int i=cnt;i>=1;i--){
cout<<ans[i]<<" ";
}
}
/*
6 15 1 0 1 25 68 0 2 30 50 0 5 0 101 1 2 70 77 1 3 35 42 2 0 0 22 2 1 40 86 2 3 0 23 2 4 45 40 3 1 64 14 3 5 0 23 4 1 95 8 5 1 0 84 5 2 90 64 5 3 36 40
*/
最新文章
- 整合struts2+hibernate详细配置步骤及注意事项
- ActiveReports 11 新特性速递
- [转载] python 计算字符串长度
- Ubuntu 12.04 系统安装极点五笔输入法
- 清爽绿色格调图文box通用样式
- Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具
- Hibernate+maven+mysql
- virtualbox端口转发
- css案例学习之ul li dl dt dd实现二级菜单
- 串口调试工具(Python2.7+pyserial+Tkinter)
- 多版本jQuery的使用剖析
- Swift - 运算符重载和运算符函数
- jQuery ajax中使用serialize()方法提交表单数据示例
- Ext 行统计有意思的实现.(js对象的循环, ext列的设置)
- Django model select的各种用法详解
- TCP和UDP基本原理
- Redis特性--多数据库与事务性
- 自己开发chrome插件生成二维码
- coursera国际法笔记 持续更新
- android webview goback 跳过页面302自动跳转方法
热门文章
- 在linux操作系统上进行简单的C语言源码的gcc编译实验
- elasticsearch+logstash+kibana部署
- CSS子元素在父元素中水平垂直居中的几种方法
- oracle 中INSTR 函数和SUBSTR函数的使用
- caps lock 映射成 esc,右Ctrl映射右移
- Hibernate3核心API使用
- pipreqs------查找python项目依赖并生成requirement
- 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境
- 手把手教你如何玩转Solr(包含项目实战)
- JavaScript(7)——DOM