传送门

完了我好像连分层图最短路都不会了……果然还是太菜了……

具体来说就是记录一个步数表示免费了几条边,在dijkstra的时候以步数为第一关键字,距离为第二关键字。枚举边的时候分别枚举免不免费下一条边。然后其他基本就和普通的dijkstra一样了

据说这题卡spfa,特意把刚写好的spfa给改了(很懵逼为啥写spfa全T,我写挂了?)

 //minamoto
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=,M=,K=;
struct node{
int x,cnt,dis;
node(){}
node(int x,int cnt,int dis):x(x),cnt(cnt),dis(dis){}
inline bool operator <(const node b)const
{return cnt!=b.cnt?cnt>b.cnt:dis>b.dis;}
};
priority_queue<node> q;
int vis[N][K],dis[N][K];
int head[N],Next[M],ver[M],edge[M],tot;
int n,m,k;
inline void add(int u,int v,int e){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=e;
}
void dijkstra(){
memset(dis,0x3f,sizeof(dis));
memset(vis,,sizeof(vis));
q.push(node(,,)),dis[][]=;
while(!q.empty()){
int u=q.top().x,cnt=q.top().cnt;q.pop();
if(vis[u][cnt]) continue;
vis[u][cnt]=;
for(int i=head[u];i;i=Next[i]){
int v=ver[i];
if(dis[v][cnt]>dis[u][cnt]+edge[i]){
dis[v][cnt]=dis[u][cnt]+edge[i];
q.push(node(v,cnt,dis[v][cnt]));
}
if(cnt+<=k&&dis[v][cnt+]>dis[u][cnt]){
dis[v][cnt+]=dis[u][cnt];
q.push(node(v,cnt+,dis[v][cnt+]));
}
}
}
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),k=read();
for(int i=,u,v,e;i<=m;++i)
u=read(),v=read(),e=read(),add(u,v,e);
dijkstra();
printf("%d\n",dis[n][k]);
return ;
}

最新文章

  1. Leetcode Insert Interval
  2. ahk之路:利用ahk在window7下实现窗口置顶
  3. C++语言-06-文件操作
  4. tableview中在tableheaderView上放一个视图,第一次进入视图显示不正常,往下拉视图仍然不正常,往上拉视图正常
  5. iOS - Widget 小部件
  6. HDOJ 1226 超级密码
  7. AOJ - 2224 Save your cat(最小生成树)
  8. 单点登录与消息队列以及在J2EE中的实现方案
  9. Windows7服务无法启动的解决
  10. python-从redis数据库中读数据
  11. python -序列化
  12. js基本知识
  13. 老K漫谈区块链的共识(3)——分布式系统和区块链共识
  14. oracle中实现某个用户truncate 其它用户下的表
  15. JMeter&#160;逻辑控制之While循环控制器(While&#160;Controller)
  16. 深入理解Java的堆内存和线程内存
  17. 跨交换机划分vlan配置
  18. linux shell创建目录、遍历子目录
  19. python 中 类型转换 bytes
  20. C#学习笔记(21)——C#获取文件夹下的所有文件的文件名

热门文章

  1. BEC listen and translation exercise 48
  2. QWidget、QMainWindow、QFrame、QWindow、QDialog、QScrollArea区别
  3. Smali文件添加try/catch语句,出现“invalid use of move-exception”异常
  4. vc中播放mp3文件的方法小结
  5. xcopy语法
  6. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
  7. [转]nodejs中的process模块--child_process.exec
  8. NSSet 用法
  9. for循环中的条件执行循序
  10. MyBatis动态传入表名,字段名参数的解决办法---statementType用法