POJ 3259 虫洞(Bellman-Ford判断有无负环的问题)

描述:

在探索他的许多农场时,Farmer John发现了许多令人惊叹的虫洞。虫洞是非常奇特的,因为它是一条单向路径,在您进入虫洞之前的某个时间将您带到目的地!每个FJ的农场包括Ñ(1≤ ñ ≤500)字段方便地编号为1 .. Ñ中号(1≤ 中号 ≤2500)的路径,和w ^(1≤ w ^ ≤200)虫洞。

由于FJ是狂热的时间旅行爱好者,他想要做以下事情:从一些场地开始,穿过一些路径和虫洞,并在他最初离开前的一段时间返回起跑场。也许他将能够见到自己:)。

为了帮助FJ找出这是否可行与否,他将与完整的地图供你˚F(1≤ ˚F他的农场≤5)。没有路径需要超过10,000秒的旅行时间,没有虫洞可以使FJ及时返回超过10,000秒。

输入:

第1行:单个整数,FF农场描述如下。 
每个农场的第1行:分别为三个以空格分隔的整数:NMW 
第2行。每个农场的M + 1:三个以空格分隔的数字(SET)分别描述:双向路径在SE之间需要T秒来遍历。两个字段可能通过多个路径连接。 
线中号 2 .. 中号 + w ^每个场的1:三个空间分隔的数字(SET)分别描述:从SE的单向路径,也将旅行者移回T秒。

输出:

第1行...... F:对于每个农场,如果FJ可以达到目标,则输出“YES”,否则输出“NO”(不包括引号)。
 
//这是一道判断有无负环的题目,主要是为了熟悉bellman-Ford算法,写法也是采用模板题的写法
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; int f,n,m,w,all_e;
int dis[];
struct node{
int s;
int e;
int t;
} edge[]; bool bellman_ford()
{
bool flag; for(int i=; i<n-; i++)
{
flag=false;
for(int j=; j<all_e; j++)
if(dis[edge[j].e] > dis[edge[j].s] + edge[j].t)
{
dis[edge[j].e] = dis[edge[j].s] + edge[j].t ;
flag=true;
} if(!flag)
break;
} for(int j=; j<all_e; j++)
if(dis[edge[j].e] > dis[edge[j].s] + edge[j].t)
return true; return false;
} int main ()
{
cin>>f;
while(f--)
{
memset(dis, 0x3f, sizeof(dis));
cin>>n>>m>>w;
all_e=;
int u,v,c;
for(int i=; i<m; i++)
{
cin>>u>>v>>c;
edge[all_e].s=edge[all_e+].e=u;
edge[all_e].e=edge[all_e+].s=v;
edge[all_e].t=edge[all_e+].t=c;
all_e=all_e+;
} for(int i=; i<w; i++)
{
cin>>u>>v>>c;
edge[all_e].s=u;
edge[all_e].e=v;
edge[all_e].t=-c;
all_e++;
} if(bellman_ford())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl; }
return ;
}

POJ 1860 兑换货币(判断有无正环)

描述

我们城市有几个货币兑换点在运作。假设每个点专门处理两种特定的货币,并且只对这些货币执行兑换操作。可以有几个点专门针对同一种货币。每个点都有自己的汇率,A到B的汇率是1A的B的数量。另外,每个兑换点都有一定的佣金,你必须为你的兑换业务支付的金额。佣金总是以货币量收取。
例如,如果你想在兑换点将100美元兑换成俄罗斯卢布,汇率为29.75,佣金为0.39,你将得到(100-0.39)*29.75=2963.3975RUR。
你当然知道,在我们的城市里,你可以对付N种不同的货币。让我们为每种货币分配从1到N的唯一整数。然后,每个交换点可以用6个数字来描述:整数A和B-它交换的货币数和实R。AB型、CAB型,R和C-交换A至B和B至A时的汇率和佣金。
尼克有一些货币S,他想知道他是否可以某种方式,在一些外汇操作后,增加他的资本。当然,他最终想把钱换成S货币。帮助他回答这个难题。尼克在做手术的时候总要有一笔非负的钱。

输入

输入的第一行包含四个数字:n-货币数量,M-外汇点数,S-货币尼克的数量,V-他拥有的货币单位的数量。以下M行按上述顺序分别包含6个数字-对应的交换点的描述。数字由一个或多个空格分隔。1<=S<=N<=100,1<=M<=100,V为实数,0<=V<=103
每一点的汇率和佣金是真实的,小数点之后最多有两位数,即10。-2<=rate<=102,0<=佣金<=102
如果在这个序列中没有不止一次使用交换点,那么让我们简单地调用交换操作的某些序列。您可以假设,在任何简单的交换操作序列的末尾和开始处的数字值的比率将小于10。4

输出量

如果尼克能增加他的财富,产出是肯定的,在其他情况下输出不输出文件。

样本输入

3 2 1 20.0
1 2 1.00 1.00 1.00 1.00
2 3 1.10 1.00 1.10 1.00

样本输出

YES
//该题刚刚写的时候,不知道怎么处理这些数据,把这些数据看成图,其实本质都是一样的,只不给边赋予了性质,处理好这些数据又是一道模板题
#include <iostream>
#include <cstring>
using namespace std; int g1[][]={},g2[][]={};
double dis[]={};
int n,m,s;
double v; struct node{
int a,b;
double ha,hb;
double ya,yb;
}edge[]; bool bellman_ford()
{
bool flag=false; for(int i=; i<n-; i++)
{
flag=false;
for(int j=; j<*m; j++)
{
if((dis[edge[j].a]-edge[j].ya)*edge[j].ha>dis[edge[j].b])
{
dis[edge[j].b]=(dis[edge[j].a]-edge[j].ya)*edge[j].ha;
flag=true;
}
}
if(!flag)
break;
} for(int j=; j<*m; j++)
{
if((dis[edge[j].a]-edge[j].ya)*edge[j].ha>dis[edge[j].b])
{
dis[edge[j].b]=(dis[edge[j].a]-edge[j].ya)*edge[j].ha;
return true;
}
}
return false; } int main()
{
cin>>n>>m>>s>>v;
dis[s]=v;
for(int i=; i<*m; i=i+)
{
cin>>edge[i].a>>edge[i].b>>edge[i].ha>>edge[i].ya>>edge[i].hb>>edge[i].yb;
edge[i+].b=edge[i].a, edge[i+].a=edge[i].b;
edge[i+].ha=edge[i].hb, edge[i+].hb=edge[i].ha;
edge[i+].ya=edge[i].yb, edge[i+].yb=edge[i].ya;
} if(bellman_ford())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return ;
}

Bellman-Ford算法模板题的更多相关文章

  1. Bellman—Ford算法思想

    ---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...

  2. Bellman - Ford 算法解决最短路径问题

    Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...

  3. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  4. POJ 3041 匈牙利算法模板题

    一开始预习是百度的算法 然后学习了一下 然后找到了学长的ppt 又学习了一下.. 发现..居然不一样... 找了模板题试了试..百度的不好用 反正就是wa了..果然还是应当跟着学长混.. 图两边的点分 ...

  5. poj 1274 The Perfect Stall【匈牙利算法模板题】

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20874   Accepted: 942 ...

  6. POJ 1459 Power Network(网络最大流,dinic算法模板题)

    题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数.      接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...

  7. HDU - 2255 奔小康赚大钱 KM算法 模板题

    HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...

  8. Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】

    题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...

  9. UVA - 558 Wormholes (SPEA算法模板题)

    先给出题面:https://vjudge.net/problem/UVA-558 题意描述:给你含n个点以及m条边的图,让你判断在这个图中是否存在负权回路. 首先,我们来介绍什么是SPEA算法 SPF ...

随机推荐

  1. 常用类枚举和DATE的介绍

    1 常用类 日期时间类 时间戳的内容:就是距离特定时间的时间间隔.,本质上也是一种整形(long). 例如:计算机时间戳就是距离历元(1970-01-01 00:00:00:000)的时间间隔. 世界 ...

  2. PrimeNG之FileUpload

    --文件上传是一个支持拖放,多文件上传,自动上传,进度跟踪和验证的上传. Import import {FileUploadModule} from 'primeng/primeng'; Gettin ...

  3. Java之事务的基本应用

    基本介绍 事务是数据一致性最基本的保证,也就是说一个事务中的操作要么都成功,要么都失败,不允许部分成功.我们常说的事务就是jdbc事务,当然Java中还有其他事务,并且在使用jdbc事务有很多注意点, ...

  4. React-Router4.x中文文档

    以下为翻译的中文API(水平有限,凑合看,欢迎纠正补充~) <BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件 ...

  5. Python3学习之路~5.11 configparser模块

    用于生成和修改常见配置文档,当前模块的名称在 python 2.x 版本中为 ConfigParser, python 3.x 版本中变更为 configparser. 来看一个好多软件的常见文档格式 ...

  6. (转)git 忽略规则

    对于经常使用Git的朋友来说,.gitignore配置一定不会陌生.废话不说多了,接下来就来说说这个.gitignore的使用. 首先要强调一点,这个文件的完整文件名就是".gitignor ...

  7. 10个有趣的Python教程,附视频讲解+练手项目。

    从前的日色变得慢,车.马.邮件都慢 一生只够爱一门编程语言 从前的教程也好看,画面精美有样子 你看了,立马就懂了 Python最性感的地方,就在于它的趣味性和前沿性,学习Python,你总能像科技节的 ...

  8. go语言的安装与开发环境

    安装golang编译器: https://studygolang.com/dl 之后设置环境变量GOPATH(项目目录)  GOROOT(默认已经设置好) 安装编辑器:IDEA安装和破解 https: ...

  9. 解析web应用处理流程

    客户端(浏览器.app.ajax.爬虫程序)通过域名(dns绑定)向服务器发送http协议,域名可以泛解析到机群.机器,服务器接收http请求报文,通过WSGI协议链接框架做代码逻辑层的处理,解析完逻 ...

  10. oracle ora-12514解决办法

    原来配置好的数据库监听用plsql登陆报错ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 网上说的改listener.ora 添加如下配置 SID_LIST_LISTENER = ...