最短路(bellman)-hdu1217
Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。
这时候,就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个。
由于此题中需要求的是有一种货币A,通过一系列的转化,能够再次转化回A,因此,运用bellman算法来解决此题。
具体的关于bellman最短路的求法请见转载博客:http://www.cnblogs.com/aiguona/p/7226533.html
题目链接:https://vjudge.net/problem/HDU-1217
题目描述:



代码描述:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <iostream>
using namespace std; const int MAX_E = ;
const int MAX_V = ;
const int INF = 0x3f3f3f3f;
struct node{
int from,to;
double cost;
}es[MAX_E*];//用于存图
int cae=;
int V,E;
double d[MAX_V];
map<string,int> mp;//将字符串问题转换为数字问题
bool bellman(int s){
//fill(d,d+MAX_V,-2);
for(int i=;i<MAX_V;i++){
d[i]=-;
}
d[s]=;//是初始值为1,假设某人有1块钱,用这1块钱去做交换
for(int j=;j<V;j++){//进行反复松弛操作,使得每个节点的最短距离估计值逐步逼近其最短距离
bool update=false;
for(int i=;i<E;i++){
if(d[es[i].from]!=- && d[es[i].to] < d[es[i].from]*es[i].cost){
if(j==V-){//当执行到V-1次循环时,说明该货币已经转换回来了
return true;
}
d[es[i].to]=d[es[i].from]*es[i].cost;
update=true;
}
}
if(!update) break;//优化这里,如果这趟没跟新任何节点就可以直接退出了。
}
return false;
} void solve(){
bool flag=false;
for(int i=;i<V;i++){//对于每一种存在的货币来说,都遍历一遍
if(bellman(i)){//如果说存在一种货币能够转换回来并且盈利,则成功,可直接退出
flag=true;
break;
}
}
if(flag){
cout << "Case " << ++cae << ": Yes" << endl;
}else{
cout << "Case " << ++cae << ": No" << endl;
}
} int main(){
//ios::sync_with_stdio(false)的用法:详见博客 https://blog.csdn.net/vocaloid01/article/details/77892490
ios::sync_with_stdio(false);//这样就可以取消cin于stdin的同步,使得cin的效率与scanf差不多,其中sync好像是同步的意思
while(cin>> V && V){
mp.clear();
for(int i=;i<V;i++){
string str;
cin >> str;
mp[str]=i;//将str的“下标”赋值为i,即为了方便后续存图,用数字i来代替字符串str
}
cin >> E;
map<string,int>::iterator it;//迭代器用于遍历map中的元素
for(int i=;i<E;i++){
string str1,str2;
double cost;
cin >> str1 >> cost >> str2;
it=mp.find(str1);//查找函数,即找到str1在mp中的位置
es[i].from=it->second;//将找到的str1对应的“下标”,将结点i的起点值赋值为str1所对应的下标值
it=mp.find(str2);
es[i].to=it->second;//将找到的str2对应的“下标”,将结点i的终点值赋值为str1所对应的下标值
es[i].cost=cost;//把结点i由起点from->to所对应的边的边长赋值为cost
}
solve();
}
return ;
}
最短路(bellman)-hdu1217的更多相关文章
- 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]
传送门 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...
- poj 3259 Wormholes(最短路 Bellman)
题目:http://poj.org/problem?id=3259 题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路,虫洞有这样的性质: 时间倒流.问你这 ...
- NITACMOJ144稳定串
点我>>题目链接 稳定串 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java ...
- 蓝桥杯 algo_5 最短路 (bellman,SPFA)
问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个 ...
- 最短路(dijskra+SPFA+Bellman)
最短路 Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- hdu-1317 XYZZY---Floyd判连通+bellman最短路
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 题目大意: 题意:有n个房间(n<=100),每个房间有一个点权(第1号房间和第n号房间 ...
- Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化)
Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回 ...
- 最短路(bellman)-hdu2066
题目链接:https://vjudge.net/problem/HDU-2066 题目描述: 代码实现: #include <cstdio> #include <cstring> ...
- 最短路(Bellman)-Hdu1874畅通工程序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城 ...
随机推荐
- PID控制器开发笔记之十:步进式PID控制器的实现
对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定.为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法. 1.步进式PID的基本思想 所谓步进式PID ...
- js调用ajax案例
js调用ajax案例 测试地址:http://www.w3school.com.cn/tiy/t.asp?f=ajax_get 嵌入下面代码,点击提交,再点击请求数据.就可以看到结果了. <ht ...
- 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- Confluence 6 配置 XSRF 保护
Confluence 需要一个 XSRF 令牌才能创建一个评论,这个被用来保护用户不在评论区恶意发布内容.所有 Confluence 自定义的主题都被启用了这个功能,但是如果你使用自定义主题的话,可能 ...
- 如何在cmd中执行python文件
打开cmd终端 输入python 然后再输入要执行文件的路径 就可以把python文件运行起来 ...
- IE11总是有缓存的问题
F12,里面选择网络,始终从服务器刷新..
- 1705: 小明在工作(zzuli)
题目描述 小明的工作是负责记录饭堂中正在排队的人的信息 在他的工作中会有三种可能的事件发生: 1.编号为id的学生加入到队伍的最后面 2.排在最前面的学生打完饭离开了队伍 3. ...
- Django将默认的SQLite更换为MySQL
1.注释默认的SQLite3配置: blogproject/settings.py ''' DATABASES = { 'default': { 'ENGINE': 'django.db.backen ...
- echarts + timeline 显示多个options
var option = { //timeline基本配置都写在baseoption 中 baseOption: { timeline: { //loop: false, axisType: 'cat ...