HDOJ-4725(Dijikstra算法+拆点求最短路)
The Shortest Path in Nya Graph
HDOJ-4725
- 这题是关于最短路的问题,但是和常规的最短路有点不同的就是这里多了层次这一结构。
- 为了解决这一问题可以把每一层抽象或者划分为两个点:入点和出点。
- 对于每个点,将所在层的入点和该点相连,再将该点和所在层的出点相连,权值都为0.
- 对于每一层,将该层的出点和上面一层,以及下面一层的入点相连,取值就是题目给的c。
- 对于其余的路径,则按照题意进行连接就行了。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
using namespace std;
const int INF=0X3F3F3F3F;
const int maxn=300005;
int n,m,c;
struct edge{
int to;
int cost;
};
struct node{
int dis;
int to;
bool operator<(const node& t)const{
return dis>t.dis;
}
};
int d[maxn];
vector<edge> edges[maxn];
int dijikstra(int s){
priority_queue<node> q;
memset(d,INF,sizeof(d));
d[s]=0;
q.push({0,s});
while(!q.empty()){
node now=q.top();
q.pop();
int v=now.to;
int dis=now.dis;
if(d[v]<dis)
continue;
for(int i=0;i<edges[v].size();i++){
int u=edges[v][i].to;
int cost=edges[v][i].cost;
if(d[u]>d[v]+cost){
d[u]=d[v]+cost;
q.push({d[u],u});
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
int k=0;
while(t--){
cin>>n>>m>>c;
int layer;
for(int i=1;i<=maxn;i++){
edges[i].clear();
}
for(int i=1;i<=n;i++)
{
cin>>layer;
edges[i].push_back({n+(layer<<1),0});//当前点向该层的出点连边
edges[n+(layer<<1|1)].push_back({i,0});//该层的入点和当前点连边
}
for(int i=1;i<=n;i++){//总共有n层
edges[n+(i<<1)].push_back({n+((i+1)<<1|1),c});
edges[n+(i<<1)].push_back({n+((i-1)<<1|1),c});
}
int from,to,cost;
for(int i=0;i<m;i++){
cin>>from>>to>>cost;
edges[from].push_back({to,cost});
edges[to].push_back({from,cost});
}
dijikstra(1);
cout<<"Case #"<<++k<<": ";
if(d[n]==INF)
cout<<-1<<endl;
else
cout<<d[n]<<endl;
}
return 0;
}
HDOJ-4725(Dijikstra算法+拆点求最短路)的更多相关文章
- 算法复习———dijkstra求次短路(poj3255)
题目: Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- poj2186tarjan算法缩点求出度
poj2186tarjan算法缩点求出度 自己打一遍第一题,入门啦,入门啦 题目还算简单,多头牛,给你仰慕关系(可传递),问你最后有没有牛被所有的牛仰慕 根据关系可以建图,利用tarjan算法缩点处理 ...
- poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数 题目大意:如题目所示 给你一些关系图——连通图,想要问你有没有个节点,损坏后,可以生成几个互相独立的网络(也就是连通分量), ...
- 【POJ - 2139】Six Degrees of Cowvin Bacon (Floyd算法求最短路)
Six Degrees of Cowvin Bacon Descriptions 数学课上,WNJXYK忽然发现人缘也是可以被量化的,我们用一个人到其他所有人的平均距离来量化计算. 在这里定义人与人的 ...
- 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】
Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...
- Java实现 蓝桥杯 算法训练 求和求平均值
试题 算法训练 求和求平均值 问题描述 从键盘输入10个浮点数,求出它们的和以及平均值,要求用函数实现 输入格式 测试数据的输入一定会满足的格式. 1 10 (1行10列的向量) 输出格式 要求用户的 ...
- Java实现 蓝桥杯VIP 算法提高 3-2求存款
算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...
- Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
算法提高 3-3求圆面积表面积体积 时间限制:1.0s 内存限制:256.0MB 问题描述 接受用户输⼊的数值,输出以该值为半径的(1)圆面积,(2)球体表面积,(3)球体体积.pi 取值3.1415 ...
随机推荐
- Pod 实现机制
Pod 为了亲密性应用而存在: 两个应用需要通过 127.0.0.1 或者 Socket 通信: 两个应用之间发生文件交互: 两个应用发生频繁的调用 共享网络 Pod 中的所有容器拥有同一个 IP 地 ...
- codeforces 1000C - Covered Points Count 【差分】
题目:戳这里 题意:给出n个线段,问被1~n个线段覆盖的点分别有多少. 解题思路: 这题很容易想到排序后维护每个端点被覆盖的线段数,关键是端点值不好处理.比较好的做法是用差分的思想,把闭区间的线段改为 ...
- C++11特性-右值引用
什么是左值,什么是右值 常见的误区有 = 左边的是左值,右边的是右值. 左值:具有存储性质的对象,即lvalue对象,是指要实际占用内存空间.有内存地址的那些实体对象,例如:变量(variables) ...
- js sort tricks All In One
js sort tricks All In One js 排序技巧 const arr = [ { label: 'False 1 ', disabled: false, }, { label: 'F ...
- Front End Frameworks Trending 2021
Front End Frameworks Trending 2021 Front End Frameworks https://2019.stateofjs.com/front-end-framewo ...
- npm 安装 electron 失败的解决方案
npm 安装 electron 失败的解决方案 shit GFW npm 安装 electron 失败 解决方案 https://www.npmjs.com/package/nrm $ nrm ls ...
- 钓鱼教程 All In One
钓鱼教程 All In One youtube https://www.youtube.com/results?search_query=钓鱼教程&sp=CAM%3D 钓鱼证 https:// ...
- Web 前端必备的各种跨域方式汇总
Web 前端必备的各种跨域方式汇总 跨域方式汇总 同源策略 协议相同 + 域名相同 + 端口相同 https://www.xgqfrms.xyz/index.html https://www.xgqf ...
- Python Tutorials
Python Tutorials Real Python https://realpython.com/ https://realpython.com/courses/ https://realpyt ...
- NGK团队是如何打造超高回报率的BGV项目的?
NGK旨在激励网络的供给端引导去中心化的节点集群,用于促进网络使用和增加带宽流动. 具体来讲,在未来的24个月内,NGK会将部分生态参与者纳入白名单系统有兴趣的参与者可关注官方信息. 对内,NGK采用 ...