HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4725
题意:有N个点和N层..一层有X个点(0<=X<=N).两邻两层间有一条路花费C。还有M条小路在两个点之间。问从第一个点走到第N个点最短路是多少...
题解:依然是在点之间SPFA。不过在跑的时候不仅要跑与当前点相连接的点。还有把当前点所在层的相邻层的点判断是否加入队列...
CODE:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue> #define mkp make_pair
#define fst first
#define scd second using namespace std;
int dis[100011];
int vis[100011];
int lay[100011];
vector<int>vec[100011];
struct Edge_t{
int to,next,cap;
}edge[500000];
int head[100011],et; inline void adde(int u,int v,int w){
edge[et].to=v;
edge[et].cap=w;
edge[et].next=head[u];
head[u]=et++;
} inline void spfa(int n,int C){
queue<int>q;
q.push(1);
memset(vis,0,sizeof vis);
memset(dis,-1,sizeof dis);
dis[1]=0;
int e,u,v,size,i,k;
while(!q.empty()){
u=q.front();q.pop();
vis[u]=0;
for(e=head[u];~e;e=edge[e].next){
v=edge[e].to;
if(dis[v]<0 || dis[v]>dis[u]+edge[e].cap){
dis[v]=dis[u]+edge[e].cap;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
if(lay[u]>1){
size=vec[k=(lay[u]-1)].size();
for(i=0;i<size;++i){
v=vec[k][i];
if(dis[v]<0 || dis[v]>dis[u]+C){
dis[v]=dis[u]+C;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
if(lay[u]<n){
size=vec[k=lay[u]+1].size();
for(i=0;i<size;++i){
v=vec[k][i];
if(dis[v]<0 || dis[v]>dis[u]+C){
dis[v]=dis[u]+C;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
} }
}
} int main(){
int t,tt=0,C;
int n,m,u,v,i,size,w;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&C);
memset(head,-1,sizeof head);et=0;
memset(vis,0,sizeof vis);
for(i=1;i<=n;++i){
scanf("%d",&lay[i]);//第i个点所以层为lay[i]
vec[i].clear();
}
while(m--){
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w);adde(v,u,w);
if(!vis[u]){//把点加入层..
vec[lay[u]].push_back(u);
vis[u]=1;
}
if(!vis[v]){
vec[lay[v]].push_back(v);
vis[v]=1;
}
}
if(!vis[1])//始点和终于一定要在某一层内..
vec[lay[1]].push_back(1);
if(!vis[n])
vec[lay[n]].push_back(n);
for(i=1;i<=n;++i)//如果某一层没有点
if(vec[lay[i]].empty())
vec[lay[i]].push_back(i);
spfa(n,C);
printf("Case #%d: %d\n",++tt,dis[n]);
}
return 0;
}
HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】的更多相关文章
- 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 (最短路)
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 (最短路 )
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...
- HDU 4725 The Shortest Path in Nya Graph(最短路拆点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意:n个点,某个点属于某一层.共有n层.第i层的点到第i+1层的点和到第i-1层的点的代价均是 ...
- HDU 4725 The Shortest Path in Nya Graph(最短路建边)题解
题意:给你n个点,m条无向边,每个点都属于一个层,相邻层的任意点都能花费C到另一层任意点,问你1到n最小路径 思路:没理解题意,以为每一层一个点,题目给的是第i个点的层数编号.这道题的难点在于建边,如 ...
- 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,Dijkstra+加点。
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
随机推荐
- 使用css3和伪元素制作的一个立体导航条
使用css3和伪元素制作的一个立体导航条供大家参考,代码如下: <!doctype html> <html lang="en"> <head> ...
- [LeetCode]题解(python):144-Binary Tree Preorder Traversal
题目来源: https://leetcode.com/problems/binary-tree-preorder-traversal/ 题意分析: 前序遍历一棵树,递归的方法很简单.那么非递归的方法呢 ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
- 如何使用Excel和Word编辑和打印条形码
本文介绍如何使用Microsoft Office Excel 2007和Microsoft Office Word 2007进行条形码的编辑后,通过普通的办公打印机将条形码打印出来. 对于少量,简单的 ...
- Spring Boot MyBatis 连接数据库
最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...
- Html 小插件10 即时新闻
效果图 <!--即时新闻--><iframe name="alimamaifrm" frameborder="0" marginheight= ...
- 破解win7开机密码,又不取消密码
Win7开机密码破解方法 1. 进入pe.(可用系统盘,或者u盘启动) 2.进入c:\windows\system32下 更改magnify.exe和cmd.exe的所有者为administrator ...
- node.weiChat
微信的朋友圈分享是现在流行的推广模式,最近两天尝试了一下使用微信进行商品的分享,分享结束后我可以在自己的数据库中查询到用户是否分享成功,包括用户使用微信进行支付时的成功验证.个人觉得微信上的教程有些绕 ...
- android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框
本文是自己学习所做笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在Android的UI开发中常常会遇到图片的缩放,就比方记事本,如今的图片都比較 ...
- 【Oracle】RAC添加新节点
RAC添加节点: 环境: OS:OEL5.6 RAC:10.2.0.1.0 原有rac1,rac2两个节点.如今要添加rac3节点: 操作过程: 改动三个节点上的/etc/hosts文件 192.16 ...