HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)
本题思路:主要是建图比较麻烦,因为结点可以在层与层之间走动,也可以在边上进行走动,所以主要就是需要找到一个将结点和层统一化处理的方法。
所以我们就可以对于存在边的结点建边,层与层之间如果层数相差一也建一条权值为c的边,相同层数之间的也建一条权值为零的边,接着Dijkstra即可。
参考代码:spfa超时了,所以就改成了Dijkstra。
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; const int maxn = 5e5, INF = 0x3f3f3f3f;
int n, m, c, Case = , num;
int dist[maxn], layer[maxn], head[maxn];
struct node {
int to, cost, Next;
} edge[maxn];
bool vis[maxn]; void addedge(int u, int v, int w) {
edge[num].to = v;
edge[num].Next = head[u];
edge[num].cost = w;
head[u] = num ++;
} // void Spfa() {
// for(int i = 1; i <= num; i ++)
// dist[i] = (i == 1 ? 0 : INF);
// memset(vis, false, sizeof vis);
// queue <int> Q;
// Q.push(1);
// vis[1] = true;
// while(!Q.empty()) {
// int u = Q.front();
// Q.pop();
// for(int k = head[u]; k != - 1; k = edge[k].Next) {
// int v = edge[k].to;
// if(dist[v] > dist[u] + edge[k].cost) {
// dist[v] = dist[u] + edge[k].cost;
// if(!vis[v])Q.push(v);
// }
// }
// }
// } struct Rule {
bool operator () (int a,int b) const {
return dist[a] > dist[b];
}
};
void dijkstra(int s) {
fill(dist, dist + num, INF);
priority_queue<int, vector<int>, Rule> q;
dist[s] = ;
q.push(s);
while(!q.empty()) {
int u = q.top(); q.pop();
for(int k = head[u]; k != -; k = edge[k].Next) {
int v = edge[k].to;
if(dist[v] > dist[u] + edge[k].cost) {
dist[v] = dist[u] + edge[k].cost;
q.push(v);
} }
}
} int main () {
int t, u, v, cost;
scanf("%d", &t);
while(t --) {
scanf("%d %d %d", &n, &m, &c);
num = ;
memset(head, -, sizeof head);
memset(layer, , sizeof layer);
for(int i = ; i <= n; i ++) {
scanf("%d", &u);
layer[i] = u;
addedge(i, n + * u - , );
addedge(n + * u, i, );
vis[u] = true;
}
for(int i = ; i < n; i ++) {
if(vis[i] && vis[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, &cost);
addedge(u, v, cost);
addedge(v, u, cost);
}
// Spfa();
dijkstra();
if(dist[n] == INF || n == )
printf("Case #%d: -1\n", Case++);
else
printf("Case #%d: %d\n", Case++, dist[n]);
}
return ;
}
HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)的更多相关文章
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- 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 5294 Tricks Device 最短路建图+最小割
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...
- HDU 5669 线段树优化建图+分层图最短路
用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)
Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
- Food HDU - 4292 网络流 拆点建图
http://acm.hdu.edu.cn/showproblem.php?pid=4292 给一些人想要的食物和饮料,和你拥有的数量,问最多多少人可以同时获得一份食物和一份饮料 写的时候一共用了2种 ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
随机推荐
- vs+qt 运行过程出现cannot run rc.exe
刚开始,我按照网上的一堆教程在qt creator中设置了各种东西,设置完以后,运行时出现cannot run rc.exe,根据百度,将C:\Program Files (x86)\Windows ...
- oracle左关联+号表示方式
1.emp表和dept表 2.emp表中empno为8888的这条数据,没有部门编号,以emp表为主表,左关联查询部门信息sql语句如下: select * from emp e,dept d whe ...
- tmpfs临时文件系统,是一种基于内存的文件系统
在Linux系统内存中的虚拟磁盘映射,可以理解为使用物理内存当做磁盘,利用这种文件系统,可以有效提高在高并发场景下的磁盘读写,但是重启后数据会丢失. 1.查看tmpfs路径 (系统默认开启,大小约为物 ...
- Intellij中部署Tomcat(详细版本-介绍了部署完之后的详细路径)
https://blog.csdn.net/HughGilbert/article/details/56424137 要点如下: 1. CATALINA_HOME即Tomcat的安装目录 2. CAT ...
- svn安装和使用
https://www.cnblogs.com/webStyle/p/3696003.html
- pyqt5在xp下的配置
qt支持库得下载,pip的不行, designer在这个里面 https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.4.1/ python只 ...
- new 对象时的暗执行顺序
为什么称为暗执行顺序,因为当我们在new 对象时,其不是简简单单的new一个完事,它要首先检查父类的,静态的,非静态的等代码,就好像我们结婚生孩子一样,要先到祖宗那里,公安局那里,左邻右舍那里,告诉他 ...
- ss客户端以及tcp,udp,dns代理ss-tproxy在线安装版--centos7.3 x64以上(7.3-7.6x64测试通过)
#!/bin/sh # # Script for automatic setup of an SS-TPROXY server on CentOS 7.3 Minimal. # export PATH ...
- 读写txt
FileStream fileStr = new FileStream("shaftCofig.txt", FileMode.OpenOrCreate); StreamReader ...
- mybatis的动态sql编写以及一对一关系查询和一对多的查询
创建mybatis数据库,运行以下sql语句 /* SQLyog Ultimate v8.32 MySQL - 5.5.27 : Database - mybatis **************** ...