hdu-2680 Choose the best route---dijkstra+反向存图或者建立超级源点
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2680
题目大意:
给你一个有向图,一个起点集合,一个终点,求最短路
解题思路:
1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1个点的单源最短路算法。。。。。
2.反向图+终点的Dijkstra,然后记录最小值。
注意:重边处理
思路1:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int n, m, s;
int d[maxn], v[maxn];
void dijkstra()
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = INF;
d[] = ;//源点是0
for(int i = ; i <= n; i++)//n+1个点,循环n+1次
{
int x = , m = INF;
for(int j = ; j <= n; j++)if(!v[j] && d[j] < m)m = d[x = j];
v[x] = ;
for(int j = ; j <= n; j++)
{
d[j] = min(d[j], d[x] + Map[x][j]);
}
}
if(d[s] == INF)cout<<"-1"<<endl;
else cout<<d[s]<<endl;
}
int main()
{
while(cin >> n >> m >> s)
{
int u, v, w;
memset(Map, INF, sizeof(Map));
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
Map[u][v] = min(Map[u][v], w);//注意重边
}
scanf("%d", &w);
while(w--)
{
scanf("%d", &u);
Map[][u] = ;//建立超级源点0
}
dijkstra();
}
return ;
}
思路2:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int n, m, s;
int d[maxn], v[maxn];
void dijkstra()
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = INF;
d[s] = ;
for(int i = ; i < n; i++)
{
int x = , m = INF;
for(int j = ; j <= n; j++)if(!v[j] && d[j] < m)m = d[x = j];
v[x] = ;
for(int j = ; j <= n; j++)
{
d[j] = min(d[j], d[x] + Map[x][j]);
}
}
}
int main()
{
while(cin >> n >> m >> s)
{
int u, v, w;
memset(Map, INF, sizeof(Map));
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
Map[v][u] = min(Map[v][u], w);//反向建图
}
dijkstra();
scanf("%d", &w);
int ans = INF;
while(w--)
{
scanf("%d", &u);
ans = min(ans, d[u]);
}
if(ans == INF)ans = -;
printf("%d\n", ans);
}
return ;
}
hdu-2680 Choose the best route---dijkstra+反向存图或者建立超级源点的更多相关文章
- hdu 2680 Choose the best route (dijkstra算法 最短路问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Time Limit: 2000/1000 MS ( ...
- hdu 2680 Choose the best route
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Description One day , Kiki ...
- hdu 2680 Choose the best route (dijkstra算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2680 /************************************************* ...
- hdu 2680 Choose the best route 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目意思:实质就是给定一个多源点到单一终点的最短路. 卑鄙题---有向图.初始化map时 千万不 ...
- HDU 2680 Choose the best route(SPFA)
Problem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness ...
- HDU 2680 Choose the best route(多起点单终点最短路问题)题解
题意:小A要乘车到s车站,他有w个起始车站可选,问最短时间. 思路:用Floyd超时,Dijkstra遍历,但是也超时.仔细看看你会发现这道题目好像是多源点单终点问题,终点已经确定,那么我们可以直接转 ...
- HDU 2680 Choose the best route 最短路问题
题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少. 解题报告:这道题的特 ...
- POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...
- HDU 3639 Hawk-and-Chicken(强连通缩点+反向建图)
http://acm.hdu.edu.cn/showproblem.php?pid=3639 题意: 有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则 ...
随机推荐
- 配置OpenCV报应用程序无法正常启动0xc000007b
我的配置软件是OpenCV3.4.1和visual studio2017.参考这篇博客(https://blog.csdn.net/qq_41175905/article/details/805604 ...
- oracle分页计算公式
//page是页数,rows是显示行数 int page=2; int rows=5; List<Articles> list=a.select(page*rows+1,(page-1)* ...
- 51nod1305(简单逻辑)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1305 题意:中文题诶- 思路:1e5的数据直接暴力肯定是不行 ...
- ch8 -- directMethod
稀疏直接法 主要用的g2o的方法.自己定义了一个新的一元边.边的误差项是测量值和由估计得来的x,y对应的灰度值之间的误差.导数为灰度对像素坐标的导数乘以像素坐标对yi*李代数的导数的负数.灰度对于像素 ...
- github:当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)解决方案
当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)弹框 图片: 原因:电脑公钥(publickey)未添加至gi ...
- 【ACM】括号配对问题 - 栈
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=1 ...
- java——集合、泛型、ArrayList、LinkedList、foreach循环、模拟ktv点歌系统
集合:一系列特殊的类,这些类可以存储任意类型的对象,长度可变,集合类都在java.util包中. 但是集合记不住对象的类型,当把对象从集合中取出时这个对象的编译类型就变成了Object类型.这样在取元 ...
- linux高级编程基础系列:线程间通信
linux高级编程基础系列:线程间通信 转载:原文地址http://blog.163.com/jimking_2010/blog/static/1716015352013102510748824/ 线 ...
- Java集合——集合框架Iterator接口
1.集合输出 很多情况下我们需要把集合的内容进行输出,也就是遍历集合. 遍历集合的方式有以下几种: 1.Iterator 2.ListIterator 3.Enumeration(枚举方式,比较老一般 ...
- Postman安装步骤
Postman是一种网页调试与发送网页http请求的chrome插件. 我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口. 1.Postman_v4.1.3下载地址: http: ...