HDU - 4725_The Shortest Path in Nya Graph
The Shortest Path in Nya Graph
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just solo hay que cambiar un poco el algoritmo. If you do not understand a word of this paragraph, just move on.
The Nya graph is an undirected graph with "layers". Each node in the graph belongs to a layer, there are N nodes in total.
You can move from any node in layer x to any node in layer x + 1, with cost C, since the roads are bi-directional, moving from layer x + 1 to layer x is also allowed with the same cost.
Besides, there are M extra edges, each connecting a pair of node u and v, with cost w.
Help us calculate the shortest path from node 1 to node N.
Input
The first line has a number T (T <= 20) , indicating the number of test cases.
For each test case, first line has three numbers N, M (0 <= N, M <= 105) and C(1 <= C <= 103), which is the number of nodes, the number of extra edges and cost of moving between adjacent layers.
The second line has N numbers li (1 <= li <= N), which is the layer of ith node belong to.
Then come N lines each with 3 numbers, u, v (1 <= u, v < =N, u <> v) and w (1 <= w <= 104), which means there is an extra edge, connecting a pair of node u and v, with cost w.
Output
For test case X, output "Case #X: " first, then output the minimum cost moving from node 1 to node N.
If there are no solutions, output -1.
Sample Input
2
3 3 3
1 3 2
1 2 1
2 3 1
1 3 3
3 3 3
1 3 2
1 2 2
2 3 2
1 3 4
Sample Output
Case #1: 2
Case #2: 3
题意:有n个点,m条通路,每个点到相邻的层需要w权值,告诉每个点所在的层数,每条通路连接的点及权值,1到n点的最小权值。
题解:最短路问题,因为数据量问题所以用dijstral算法+优先队列。
- 难点在于如何解决每个点到相邻的通路解决问题,注意如果这一层没有点是不用考虑的。
我在每一个点加了一个对应的虚拟点,其他相邻的层的点到虚拟点的距离为w,虚拟点到这个点的距离为0,这样就实现了相邻层到达的问题。
另外这个题目数组大小问题,因为加了点的问题,建议点的数目是题目给的两倍以上,路的数目是题目给的五倍以上。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>
using namespace std;
const int INF = 1e9+7;
const int maxn = 500050;
struct node
{
int u,w;
node(int a,int b):u(a),w(b){}
bool operator <(const node &q)const
{
return w>q.w;
}
};
struct edge
{
int to,w,next;
}s[maxn];
int num,head[maxn],m,n;
int f[maxn],a[maxn],dis[maxn];
void add(int u,int v,int w)
{
s[num].to = v;
s[num].w = w;
s[num].next = head[u];
head[u] = num++;
}
void dij()
{
priority_queue<node> q;
memset(f,0,sizeof(f));
int i,u,v,w;
for(i=0;i<=2*n;i++)
dis[i] = INF;
dis[1] = 0;
q.push(node(1,0));
while(!q.empty())
{
node t1 = q.top();
q.pop();
u = t1.u;
if(f[u])
continue;
f[u] = 1;
for(i=head[u];i!=-1;i=s[i].next)
{
v = s[i].to;
w = s[i].w;
if(f[v])
continue;
if(dis[u]+w<dis[v])
{
dis[v] = dis[u] + w;
q.push(node(v,dis[v]));
}
}
}
if(dis[n]==INF)
printf("-1\n");
else
printf("%d\n",dis[n]);
}
int main()
{
int t,i,k=1,u,v,w,x;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&x);
memset(head,-1,sizeof(head));
memset(f,0,sizeof(f));
num = 0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
f[a[i]] = 1;
}
for(i=1;i<=n;i++)
{
if(a[i]==1)/*如果是第一层的话只要链接上一层就可以了*/
{
add(a[i]+n,i,0);
if(f[a[i]+1]&&a[i]<n)
add(i,a[i]+n+1,x);
}
else if(a[i]==n)/*如果是第n层的话只要链接下一层就可以了*/
{
add(a[i]+n,i,0);
if(f[a[i]-1]&&a[i]>1)
add(i,a[i]+n-1,x);
}
else
{
add(a[i]+n,i,0);
if(f[a[i]-1]&&a[i]>1)
add(i,a[i]+n-1,x);
if(f[a[i]+1]&&a[i]<n)
add(i,a[i]+n+1,x);
}
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
printf("Case #%d: ",k++);
dij();
// for(i=head[1];i!=-1;i=s[i].next)
// {
// printf("%d %d\n",s[i].to,s[i].w);
// }
}
return 0;
}
HDU - 4725_The Shortest Path in Nya Graph的更多相关文章
- Hdu 4725 The Shortest Path in Nya Graph (spfa)
题目链接: Hdu 4725 The Shortest Path in Nya Graph 题目描述: 有n个点,m条边,每经过路i需要wi元.并且每一个点都有自己所在的层.一个点都乡里的层需要花费c ...
- HDU 4725 The Shortest Path in Nya Graph [构造 + 最短路]
HDU - 4725 The Shortest Path in Nya Graph http://acm.hdu.edu.cn/showproblem.php?pid=4725 This is a v ...
- HDU 4725 The Shortest Path in Nya Graph
he Shortest Path in Nya Graph Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged o ...
- HDU 4725 The Shortest Path in Nya Graph(构图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 4725 The Shortest Path in Nya Graph (最短路)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- hdu 4725 The Shortest Path in Nya Graph (最短路+建图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU4725:The Shortest Path in Nya Graph(最短路)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU-4725 The Shortest Path in Nya Graph (拆点+dji)
HDU 4725 The Shortest Path in Nya Graph : http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意: 在一个图中跑最 ...
- (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
随机推荐
- Mybatis逆向工程文件标签的详细介绍:
?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUB ...
- 对于ssm过程中的乱码问题的处理
首先是数据库乱码问题: 1.可以先检测一下是否是数据库的问题: 可以先输入查询语句SHOW VARIABLES LIKE 'character_set_%';,查看所有的编码是否是UTF-8. (一般 ...
- GVEdit中使用graphviz
官方文档 安装完graphviz后,文档在安装目录下,位置如下 E:\Gra2.38\share\graphviz\doc\html 中文乱码解决 将文件保存为utf-8编码 fontname=&qu ...
- file_instances文件实例表
SELECT * FROM performance_schema.file_instances;
- Redis源码解析:20sentinel(一)初始化、建链
sentinel(哨兵)是redis的高可用解决方案.由一个或多个sentinel实例组成的分布式系统,可以监控任意多个主节点,以及它们属下的所有从节点.当某个主节点下线时,sentinel可以将下线 ...
- Ubuntu下使用sshfs挂载远程目录到本地
访问局域网中其他Ubuntu机器,在不同机器间跳来跳去,很是麻烦,如果能够把远程目录映射到本地无疑会大大方面使用,就像Windows下的网络映射盘一样.在Linux的世界无疑也会有这种机制和方式,最近 ...
- 通过游戏学python 3.6 第一季 第五章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆 可复制直接使用 娱乐 可封装 函数
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--账号密码登陆 #!usr/bin/env python #-*-coding:utf-8-*- #QQ12411129 ...
- spring cloud深入学习(一)-----什么是微服务?什么是rpc?spring cloud简介
近年来,微服务非常的流行,那么为什么是它?简单介绍一下. 为什么是微服务? 微服务架构是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并与轻量级机制(通常是HTTP资 ...
- ckfinder图片上传成功,但无法打开This image failed to load.
原因是basedir和baseurl的问题 本地调试的时候 可以用 这种方式实现,但是部署到线上,就有问题
- Lua报unexpected symbol near错误
如果Lua脚本没有错误,那可能是UTF8 BOM的问题