最短路(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 题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城 ...
随机推荐
- C#简单画图程序
实现过程: (1) 新建窗体应用程序 (2) 添加一个MenuScrip控件:添加一个ToolScrip控件. 在ToolScrip控件中对每个单元,要将DisplayStyle属性改为Text (3 ...
- Confluence 6 管理协同编辑 - 修改你的 Synchrony 配置
你不能通过 Confluence UI 修改 Synchrony 的配置.配置的修改是通过系统属性进行修改的.在绝大部分情况下,你不需要对默认的配置进行修改. 修改 Synchrony 运行的端口. ...
- Confluence 6 从一个 XML 备份中导入一个空间
有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录 ...
- 【python】正则替换
正则替换可以使用函数 例如:替换字符串中所有#1.2.3.4#格式中的数字为0 import re def replace(x): def _replace(matched): m = matched ...
- 小学生都看得懂的C语言入门(6): 字符串
1.字符用 char 表示 #include<stdio.h> int main() { char c; char d; c=; d='; if (c==d){ printf(" ...
- Nginx详解十:Nginx场景实践篇之Nginx静态资源场景配置
一.静态资源WEB服务 1.静态资源类型:非服务器动态运行生成的文件 2.静态资源服务场景-CDN 假设静态资源存储中心在云南,用户在北京去请求一个文件,那么就会造成一个传输的延时,而如果Nginx同 ...
- C++ Primer 笔记——模板与泛型编程
1.编译器用推断出的模板参数来为我们实例化一个特定版本的函数. 2.每个类型参数前必须使用关键字class或typename.在模板参数列表中,这两个关键字含义相同,可以互换使用,也可以同时使用. t ...
- c++实现 给定直角停车位两个点,求取剩余两点坐标。
//2018-09-08-fourmi /*************************include head files************************************ ...
- The error may exist in com/bjpowernode/dao/StudentDao.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderExcept
The error may exist in com/bjpowernode/dao/StudentDao.xml### Cause: org.apache.ibatis.builder.Builde ...
- python中利用上下文管理器来实现mysql数据库的封装
from pymysql import connect class DB(object): def __init__(self, password, database): # 1.连接数据库 self ...