hdu 4725 The Shortest Path in Nya Graph 【拆点】+【最短路】
<题目链接>
题目大意:
每个点放在一层,然后给了n个点,相邻的两层距离是固定的c,有额外m条无向边,然后求1到n的最短路径,如果没有则输出-1 。
解题分析:
本题建图是关键,需要注意的是,每一层不一定只有一个点。因此,如果两层之间建边时只是简单将上面的所有点的相互连接,那么取极端情况,当只有两层
并且每层只有50000个点时,在O(N^2)的复杂度下,光是建图就已经爆了。所以我们对每一层进行拆点,但是如果每一层只拆成一个点的话,那么该层每一个
点与拆成的点之间是双向边,这样的话,该层之间所有的点之间的距离就为0了,明显不符合题意。所以我们每一层要拆成两个点,该层所有点----->拆点1,
拆点2----->该层所有点,这样该层所有点之间就不是相互可达了。
#include <bits/stdc++.h>
using namespace std; const int M = 8e5+;
#define INF 0x3f3f3f3f int n,m,c;
struct EDGE{ int to,val,nxt; }dge[M]; int head[M],cnt;
int vis[M]; struct NODE{
int loc,dis;
bool operator <(const NODE &tmp)const{ return dis>tmp.dis; }
}d[M];
inline void init(){ cnt=;memset(head,-,sizeof(head)); } inline void add(int u,int v,int w){
e[cnt]=(Edge){v,w,head[u]};head[u]=cnt++;
}
void dij(int N){
for(int i=;i<=N;i++){
vis[i]=;
d[i].loc=i,d[i].dis=INF;
}
priority_queue<NODE>q;
d[].dis=;
q.push(d[]);
while(!q.empty()){
NODE now=q.top();
q.pop();
if(vis[now.loc])continue;
vis[now.loc]=;
for(int i=head[now.loc];i!=-;i=edge[i].nxt){
int v=edge[i].to;
if(d[v].dis>d[now.loc].dis+edge[i].val){
d[v].dis=d[now.loc].dis+edge[i].val;
q.push(d[v]);
}
}
}
} int main(){
int ncase=;
int T;scanf("%d",&T);
while(T--){
init();
scanf("%d%d%d",&n,&m,&c);
for(int i=;i<=n;i++){
int u;scanf("%d",&u);
add(i,n+*u-,); //如果只将每一层虚拟成一个点,那么这样建双向边的话,就会使每一层的点相互可达,并且权值为0,很明显不行
add(n+*u,i,); //所以要像这样,该层所有点指向N+2*u-1,N+2*u指向该层所有点,这样建图不会让该层所有点之间存在双向边,符合题意
} for(int i=;i<n;i++){
add(n+*i-,n+*(i+),c); //连接i--->j层,让第i层管入度的虚拟点变成建边的起始点(把图想象出来就很好理解了)
add(n+*(i+)-,n+*i,c); //连接j--->i层
} for(int i=;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
dij(*n);
if(d[n].dis==INF)d[n].dis=-;
printf("Case #%d: %d\n",++ncase,d[n].dis);
}
}
2018-09-02
hdu 4725 The Shortest Path in Nya Graph 【拆点】+【最短路】的更多相关文章
- HDU - 4725 The Shortest Path in Nya Graph(拆点+Dijkstra)
题意:N个点,每个点有一个层号L,相邻的两层 Li 与 Li+1 之间的距离为C.另外给出M条无向边,求从点1到点N的最短路. 分析:同一层之间的两点距离并不是0,这是一个小坑.依次把相邻两层的所有点 ...
- 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 ...
- (中等) 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 ...
- 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 ...
- 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 ...
随机推荐
- XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。" "根据验证过程,远程证书无效。"
XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系." "根据验证过程, ...
- Confluence 6 其他需要备份和恢复的地方
XML 备份被描述用于在 Confluence 备份使用的其他方法,例如升级和移动服务器.使用上面描述的备份和恢复方法也适用这些地方. 我们的 upgrade guide 不要求使用一个 XML 备份 ...
- matlab 测试 数字二次混频
% test2 clear; clf; close all Fs=800000;%采样频率800k fz=80000;%载波频率80k fz1=3000;%载波频率3k fj=79000;%基波频率7 ...
- 继续JS之DOM对象二
前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...
- Windows 系统共享文件扫描
近年来历次泄露的安全事故(工控安全),其主要原因就是内部网络自身的脆弱性问题.对于内部网络的安全检查是很必要的.传统上使用CMD命令 net view 就可以扫描在线的主机但是,主机设置取消QOS的 ...
- Wireless Penetration Testing(7-11 chapter)
1.AP-less WPA-Personal cracking 创建一个honeypoint 等待链接,特点在于不需要攻击致使链接的客户端掉线,直接获取了流量的握手包. 2.Man-in-the-M ...
- lightoj1259 线性筛的另一种写法 v变成bool标记数组
也是用线性筛,但是v用int会爆,所以这个线性筛用的是另外一种写法 #include<cstdio> #include<cmath> #include<queue> ...
- CF1029E
一个看起来就不对的贪心居然是正解... 但仔细思考一下,这种贪心倒的确找不到反例.. 贪心思想:每次找出离根节点最远的点,然后由根节点向这个点的父节点连边,一直连到所有点都能被覆盖即可,这样构造出的一 ...
- export default 和 export 区别
转载:https://www.cnblogs.com/mengfangui/p/9073459.html 1.export与export default均可用于导出常量.函数.文件.模块等2.在一 ...
- python面向对象三大特性之继承
继承是创建新类的方法,以下是几个概念 父类,基类,超类: 被继承的类 子类,派生类:继承而产出的类 单继承:继承一个父类 多继承:继承多个父类 继承: 什么是什么的关系 父类中没有的属性,在字类中出现 ...