题意:

有向图,可以把k条路的长度变为0,求1到n的最短路

思路:

将图复制k份,一共k+1层图,对于每一条i→j,都连一条低层的i→高层的j,并且权值为0

即对每一对<i,j,w>,都加边<i,j,w>,<i+n,j+n,w>,<i+2n,j+2n,w>,....,<i+kn,j+kn,w>

同时加“楼梯”<i,j+n,0>,<i+n,j+2n,0>,...,<i+(k-1)n, j+kn>

然后跑一个1~(k+1)n的最短路,用迪杰斯特拉+堆优化

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0); int dist[maxn];
struct node{
int id, d;
node(){}
node(int a,int b) {id = a; d = b;}
bool operator < (const node & a)const{
if(d == a.d) return id > a.id;
else return d > a.d;
}
};
vector<node>e[maxn];
int n; void dijkstra(int s){
for(int i = ; i <= n; i++) dist[i] = inf;
dist[s] = ;
priority_queue<node>q;
q.push(node(s, dist[s]));
while(!q.empty()){
node top = q.top();
q.pop();
if(top.d != dist[top.id]) continue;
for(int i = ; i < (int)e[top.id].size(); i++){
node x = e[top.id][i];
if(dist[x.id] > top.d + x.d){
dist[x.id] = top.d + x.d;
q.push(node(x.id, dist[x.id]));
}
}
}
return;
} int main() {
int T;
scanf("%d", &T);
while(T--){
int m, k;
scanf("%d %d %d", &n, &m, &k);
while(m--){
int x ,y, w;
scanf("%d %d %d", &x, &y, &w);
for(int i = ; i <= k; i++){
e[x + i*n].pb(node(y + i*n, w));
if(i)e[x + (i-)*n].pb(node(y + i*n, )); }
}
n += k*n;
dijkstra();
printf("%d\n", dist[n]);
for(int i = ; i <= n; i++)e[i].clear();
}
return ;
}

最新文章

  1. Atitit.css 规范 bem &#160;项目中 CSS 的组织和管理
  2. BZOJ2134——单选错位
  3. esnext:最后一个参数后面也允许加逗号了
  4. word中公式居中、编号居右方法
  5. CAD2015安装教程 AutoCAD2015中文版安装激活图文教程
  6. package XXX.i386.rpm is not installed(检查在Linux上安装Oracle所需的pkg时)
  7. 斌哥的 Docker 进阶指南—监控方案的实现
  8. iOS动画详解(一)
  9. [转载]GDB十分钟教程
  10. 21. DNS 配置和端口检测
  11. 小米2s的座充,看看这个是什么芯片? - 电池&综合DIY(Flashlight Electronics-Batteries Include - 手电大家谈-手电筒爱好者之家
  12. 一个想法(续四):IT技术联盟创业众筹进度公示
  13. windows下安装redis3.2.100单机和集群详解
  14. BZOJ_2223_[Coci 2009]PATULJCI_主席树
  15. 01.pandas
  16. Python学习day2 while循环&amp;格式化输出&amp;运算符
  17. akka actors默认邮箱介绍
  18. webapi帮助文档swagger
  19. ubunta apt install error
  20. zabbix_server.conf、zabbix_agentd.conf配置文件详解

热门文章

  1. centos7下图形界面和命令行界面切换
  2. spring boot介绍
  3. 动态规划最短路径LintcodeNO110
  4. 关于ESP8266 NodeCMU固件无法刷入新代码的解决方法
  5. FlashFXP中文破解 指南
  6. .NET Core 3 WPF MVVM框架 Prism系列之模块化
  7. input值
  8. 案例分析丨H&amp;M用设计冲刺将App研发周期缩短为6个月
  9. Java 遍历集合时产生的ConcurrentModificationException异常
  10. JDBC超时设置【转】