【洛谷P4568】[JLOI2011]飞行路线
2024-09-27 20:26:17
飞行路线
今天上午模拟考试考了原题,然而数组开小了,爆了4个点。
据王♂强dalao说这是一道分层图SPFA的裸题
dis[i][j]表示到点i用k个医疗包的最小消耗,dis[u][j]+e[i].w更新dis[v][j],
dis[u][j]更新dis[v][j+1]
然而它卡SPFA,会TLE几个点
于是就有了堆优化SPFA。。(它就是堆优化dijkstra。。)
#include<cstring>
#include<cstdio>
#include<queue>
#define INF 0x3f3f3f3f
#define N 10010
int n,m,k,s,t,ans=INF;
int dis[N][];
struct HA{
int pos,cost,times;
};
struct cmp{
bool operator()(HA x,HA y){
return x.cost==y.cost?x.times>y.times:x.cost>y.cost;
}
};
std::priority_queue< HA, std::vector<HA>, cmp > q;
bool vis[N][];
int Head[N],num;
struct NODE{
int to,w,next;
} e[];
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){
while(*++now_r<'');
register int x=*now_r-'';
while(*++now_r>='')x=x*+*now_r-'';
return x;
}
inline void write(int x){
static char st[];static int top;
while(st[++top]=''+x%,x/=);
while(*++now_w=st[top],--top);
*++now_w='\n';
}
void SPFA(){
memset(dis,0x3f,sizeof(dis));
for(int i=;i<=k;i++){
dis[s][i]=;
q.push((HA){s,,i});
}
while(!q.empty()){
int u=q.top().pos,f=q.top().times;
q.pop();
vis[u][f]=;
for(int i=Head[u];i;i=e[i].next){
int v=e[i].to;
if(dis[v][f]>dis[u][f]+e[i].w){
dis[v][f]=dis[u][f]+e[i].w;
if(!vis[v][f]){
vis[v][f]=;
q.push(HA{v,dis[v][f],f});
}
}
if(f<k&&dis[v][f+]>dis[u][f]){
dis[v][f+]=dis[u][f];
if(!vis[v][f+]){
vis[v][f+]=;
q.push(HA{v,dis[v][f+],f+});
}
}
}
}
}
int main()
{
fread(ch,,ch_top,stdin);
n=read(); m=read(); k=read();
s=read(); t=read();
int x,y,w;
for(int i=;i<=m;i++){
x=read(); y=read(); w=read();
e[++num].to=y;
e[num].w=w;
e[num].next=Head[x];
Head[x]=num;
e[++num].to=x;
e[num].w=w;
e[num].next=Head[y];
Head[y]=num;
}
SPFA();
write(dis[t][k]);
fwrite(ch,,now_w-ch,stdout);
return ;
}
最新文章
- [转]python 常用类库!
- IOS SWIFT 启动流程学习
- 《征服 C 指针》摘录3:数组 与 指针
- BT协议分析(1)&mdash;1.0协议
- Web程序员开发App系列 - 开发我的第一个App,源码下载
- Spring实战2:装配bean—依赖注入的本质
- HDU 1707
- git源码中的Makefile
- Javascript计算密码的强度
- android listview 重用view导致的选择混乱问题
- Chapter 21_1 字符串函数
- STM32F103 使用TIM3产生四路PWM
- arguments及arguments.callee
- Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?
- Spring框架学习笔记(3)——配置bean
- Restful中 @RequestParam,@PathParam,@PathVariable等注解区别
- Spring ES
- 中文dumps显示
- 机器学习入门07 - 验证 (Validation)
- Ubuntu Firefox HTML5