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 ...
随机推荐
- DataGridView插入一行数据和用DataTable绑定数据2种方式
以前不会用DataGridView的时候一直使用DataTable绑定的方式,如下: DataTable table = new DataTable(); //给表添加一列Name,此名字和 tabl ...
- leetcode Longest Substring Without Repeating Characters python
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtyp ...
- linux杂记(七)linux档案与目录管理指令
1.目录的相关操作:cd,pwd,mkdir,rmdir 路径(PATH): 绝对路径:路径的写法[一定由根目录/写起],例如/usr/share/doc这个目录 相对路径:路径的写法[不是由/写起] ...
- java如何引入接口中定义的常量
接口 (A.java) : package config; public interface A { String PROJECT_ROOT_DIR = System.getProperty(&quo ...
- Highchart 改编风力风向图
基于highchart修改而成的风力风向图 1.替换highchart.js drawpoints方法,替换内容如下: drawPoints: function() { var a, b = this ...
- python 关于dict的一些总结
总结了一些关于字典的小技巧或者注意的地方. 使用zip创建字典 创建字典有以下三种方法 dict(a=1, b=2, c=2) dict([(a,1), (b,2), (c,3)]) dict({a: ...
- VS中,NUnit适合测试者尽心开发自动化测试,而Unit适合开发者开发单元测试。
1.整合Visual Studio和NUnit 在Visual Studio 2010中,通过安装NUnit插件,可以不使用外部客户端,直接运行测试. 当然,貌似在最新版本的VS2012中,安装过NU ...
- php错误 mysql_query():supplied argument is not a valid MySQL result resource
出现这种错误,原因是出现该错误的函数的参数出现了问题 参数出现问题有多种情况: 1.sql查询语句有问题,可能多了一个逗号,少了一个逗号,多了括号之类的: 2.与数据库连接的参数有问题,用户名.密码. ...
- IC封装
1.QFN •QFN—Quad Flat No-lead Package 四方无引脚扁平封装 2.SOIC •SOIC—Small Outline IC 小外形IC封装 3.TSSOP •TSSOP— ...
- Android Activity和Fragment传递数据
1.Activity与Activity传递数据 UserLoginActivity.java: Intent welcomePage = new Intent(); Bundle dataBundle ...