hdu-2680 Choose the best route---dijkstra+反向存图或者建立超级源点
2024-09-01 17:42:09
题目链接:
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 ;
}
最新文章
- Visual Studio Code 1.0发布:100+语言,300+pull请求,1000+扩展
- getPos,offsetTop
- 使用MiniProfiler调试ASP.NET MVC网站性能
- 【C#学习笔记】Hello World
- hdu-5680 zxa and set(水题)
- json <;--->;List集合,实体类 之间的相互转换
- 《JavaScript 闯关记》之 DOM(上)
- div模拟textarea以实现高度自适应实例页面
- .Net 数组去除重复项
- json对象、构造原型、组合继承
- Dynamics CRM 本地插件注册器连CRMAn unsecured or incorrectly secured fault was received from the other party
- 回归树(Regression Tree)
- Java的selenium代码随笔(5)
- vue项目中如何使用多语言(vue-i18n)
- MongoDB----提升
- [No000018F]Vim自动缩进配置、原理和tab键替换空格-Vim使用技巧(4)
- php输出语句
- windows下的MySql实现读写分离
- lua -- encode and decode
- mysql中查看数据库的版本,什么版本
热门文章
- JS中的for....in循环 和 for ...of循环以及iterable遍历Map和Set
- CodeForces 125D【鸽巢原理】
- poj3694(lca + tarjan求桥模板)
- 2017-10-1 清北刷题冲刺班a.m
- WampServer的安装
- IdentityServer4 学习笔记[1]-客户端授权
- SVN历史版本比较中文乱码
- crawlspider的源码学习
- unity ForceMode
- Linux Bash 命令行快捷键小结