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.
 
  题意就是求最短路问题,但是有一个层的概念,刚开始的时候是想着把相邻两层之间的每一点都再连一条边,但是这样的复杂度可以到达 n^2 ,比如在相邻两层上都有 n/2 个点。
  然后百度了之后,发现是要增加点,表示每一层,这个点和同层的连边的边权为0,这样的话两层之间就只需要再加一条边,但是这样还有一个问题,就是同层点之间来往的话,应该是到达相邻的层然后再回来,所以需要在每一层增加两点,分别表示入的和出的。。。
  还有一个坑点,就是如果某一层没有点的话,是不能与相邻层连线的。。。
 
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h> using namespace std; const int MaxN=*;
const int MaxM=*;
const int INF=10e9+; struct Edge
{
int to,next,cost;
}; struct Node
{
int v,val; Node(int _v=,int _val=):v(_v),val(_val) {} bool operator < (const Node &a) const
{
return val>a.val;
}
}; Edge E[MaxM];
int head[MaxN],Ecou; void init(int N)
{
Ecou=; for(int i=;i<=N;++i)
head[i]=-;
} void addEdge(int u,int v,int c)
{
E[Ecou].to=v;
E[Ecou].cost=c;
E[Ecou].next=head[u];
head[u]=Ecou++;
} bool vis[MaxN]; void Dijkstra(int lowcost[],int N,int start)
{
priority_queue <Node> que;
Node temp;
int u,v,c;
int len; for(int i=;i<=N;++i)
{
lowcost[i]=INF;
vis[i]=;
} lowcost[start]=;
que.push(Node(start,)); while(!que.empty())
{
temp=que.top();
que.pop(); u=temp.v; if(vis[u])
continue; vis[u]=; for(int i=head[u];i!=-;i=E[i].next)
{
v=E[i].to;
c=E[i].cost; if(!vis[v] && lowcost[v]> lowcost[u]+c)
{
lowcost[v]=lowcost[u]+c;
que.push(Node(v,lowcost[v]));
}
}
}
} int ans[MaxN];
bool have[MaxN]; int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); int T;
int N,M,C;
int u,v,c;
int cas=; scanf("%d",&T); while(T--)
{ scanf("%d %d %d",&N,&M,&C); init(*N);
memset(have,,sizeof(have)); for(int i=;i<=N;++i)
{
scanf("%d",&u); addEdge(i,N+*u-,);
addEdge(N+*u,i,); have[u]=;
} for(int i=;i<N;++i)
if(have[i] && have[i+])
{
addEdge(N+*i-,N+*(i+),C);
addEdge(N+*(i+)-,N+*i,C);
} for(int i=;i<=M;++i)
{
scanf("%d %d %d",&u,&v,&c); addEdge(u,v,c);
addEdge(v,u,c);
} Dijkstra(ans,*N,); printf("Case #%d: %d\n",cas++,ans[N]==INF ? - : ans[N]);
} return ;
}

(中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。的更多相关文章

  1. Hdu 4725 The Shortest Path in Nya Graph (spfa)

    题目链接: Hdu 4725 The Shortest Path in Nya Graph 题目描述: 有n个点,m条边,每经过路i需要wi元.并且每一个点都有自己所在的层.一个点都乡里的层需要花费c ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  8. 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 ...

  9. HDU - 4725 The Shortest Path in Nya Graph 【拆点 + dijkstra】

    This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...

随机推荐

  1. MyBatis-xml配置SQL文件中,传入List数组、基本类型String、int……、与自定义类型的方法

    //基本类型 @Override public String queryItemNumber(String packId) throws Exception { // TODO Auto-genera ...

  2. wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面

    在wpf的XAML的Window.Resources中,一个资源引用另外一个资源,出现如下错误: “错误 1 “{DependencyProperty.UnsetValue}”不是 Setter 上“ ...

  3. curl 测试web站点的响应时间

    curl -s -w "\n"::%{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total} ...

  4. Anton and Making Potions

    Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input sta ...

  5. MySQL 常用基础命令

    一.启动与关闭 1.1 Linux下启动mysql 的命令: a. rpm包安装:service mysqld start b. 源码包安装:/usr/local/mysql/bin/mysqld_s ...

  6. c++内存流

    1.MemoryStream.h文件内容 ifndef _MEM_STREAM_H_ #define _MEM_STREAM_H_ #include <string> class CMem ...

  7. a:link visited hover active

    CSS中a:link.a:visited.a:hover.a:active的用法:建议:尽可能的手写代码,可以有效的提高学习效率和深度.在网页设计中,设计美观的超链接效果可以增强网站的用户体验,可能会 ...

  8. HDU2579--Dating with girls(2)--(DFS, 判重)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  9. ACM暑期训练总结

    ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中 ...

  10. 7--OC中NSLog函数输出格式详解

    OC中NSLog函数输出格式详解 • %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • % ...