BZOJ 1579 道路升级 Dijkstra
2024-08-31 15:07:28
思路:
这道题 不能把所有边都建出来 会MLE的!!!
oh gosh
其实不建所有的边 用的时候再调就行了….(也没啥区别)
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100050
int n,m,k,first[N],v[N],w[N],next[N],tot,dis[N][21],vis[N][21],xx,yy,zz;
void add(int x,int y,int z){
w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;
}
struct Node{int now,level,weight;}jy;
bool operator < (Node a,Node b){return a.weight>b.weight;}
void Dijkstra(){
memset(dis,0x3f,sizeof(dis)),dis[1][0]=0;
priority_queue<Node>pq;
jy.now=1,pq.push(jy);
while(!pq.empty()){
Node t=pq.top();pq.pop();
if(vis[t.now][t.level])continue;
vis[t.now][t.level]=1;
for(int i=first[t.now];~i;i=next[i]){
if(!vis[v[i]][t.level]&&dis[v[i]][t.level]>dis[t.now][t.level]+w[i]){
dis[v[i]][t.level]=dis[t.now][t.level]+w[i];
jy.level=t.level,jy.now=v[i],jy.weight=dis[v[i]][t.level],pq.push(jy);
}
if(t.level<k&&!vis[v[i]][t.level+1]&&dis[v[i]][t.level+1]>dis[t.now][t.level]){
dis[v[i]][t.level+1]=dis[t.now][t.level];
jy.level=t.level+1,jy.now=v[i],jy.weight=dis[t.now][t.level],pq.push(jy);
}
}
}
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&xx,&yy,&zz);
add(xx,yy,zz),add(yy,xx,zz);
}
Dijkstra();
printf("%d\n",dis[n][k]);
}
最新文章
- 在VS中操作Mysql数据库
- JavaScript 函数参数传递到底是值传递还是引用传递
- maven 无法安装plugin的问题
- win7无线网连接了,但是图标显示未连接
- GlusterFS特性介绍
- Centos linux php扩展安装步骤
- Codeforces Round #346 (Div. 2) E - New Reform 无相图求环
- 从html5标准的正式发布到国内CMS的变革
- 修复ubuntu播放wmv等视频没有声音问题
- 向输出到console的文字加样式
- DOM 对象方法
- 无格式转换php
- Spring基于注解开发异常
- 微服务之路由网关—zuul
- Queue 队列的使用
- 第七节 DOM操作应用-高级
- ( function(){…} )()和( function (){…} () )是两种立即执行函数
- pivot 与 unpivot函数
- NodeJs笔记 : express框架创建工程 ----- 路由设计
- wangEditor使用简记