poj1680 最短路判环
题意:有多个银行可以换钱,每个银行可以将特定的两种钱相互兑换,并且有自己的汇率,现在问是否可以将自己的钱通过银行兑换增加。
其实比较水,主要就是知道最短路问题里的负环可以通过bellman-fold或spfa判断出来,在这里其实就是找正的环就行了。
一开始WA了无数发……原因是传参传了int,但其实是double……
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; int head[],point[],next[],size,t[],n,m;
double r[],c[],dist[];
bool vis[]; void add(int a,int b,double r1,double c1){
point[size]=b;
r[size]=r1;
c[size]=c1;
next[size]=head[a];
head[a]=size++;
} void spfa(int s,double v){
int i;
memset(dist,,sizeof(dist));
memset(vis,,sizeof(vis));
memset(t,,sizeof(t));
dist[s]=v;
queue<int>q;
q.push(s);
vis[s]=;
bool f=;
while(!q.empty()){
if(f)break;
int u=q.front();
q.pop();
vis[u]=;
for(i=head[u];~i;i=next[i]){
int j=point[i];
if(dist[j]<(dist[u]-c[i])*r[i]){
dist[j]=(dist[u]-c[i])*r[i];
if(!vis[j]){
q.push(j);
vis[j]=;
t[j]++;
if(t[j]>n)f=;
}
}
}
}
if(f)printf("YES\n");
else printf("NO\n");
} int main(){
int s,i;
double v;
while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF){
memset(head,-,sizeof(head));
size=;
for(i=;i<=m;i++){
int a,b;
double r1,c1;
scanf("%d%d%lf%lf",&a,&b,&r1,&c1);
add(a,b,r1,c1);
scanf("%lf%lf",&r1,&c1);
add(b,a,r1,c1);
}
spfa(s,v);
}
return ;
}
poj1680 最短路判环的更多相关文章
- poj2240 最短路判环
题意:与poj1680一样,有不同的换钱渠道,可以完成特定两种货币的交换,并且有汇率,只不过此题是单向边,然后问是否能使财富增加 与poj1680一样,建图之后直接spfa判增值的环即可 #inclu ...
- poj3259 最短路判环
题意:有一些点.一些道路和一些虫洞,道路是双向的,连接两点,花费正的时间,而虫洞是单向的,连接两点,可以使时间倒退,求是否能够回到过去. 只要明确回到过去其实就是当出现一个负环的时候,不断沿这个环走, ...
- 【BZOJ 3232】圈地游戏 二分+SPFA判环/最小割经典模型
最小割经典模型指的是“一堆元素进行选取,对于某个元素的取舍有代价或价值,对于某些对元素,选取后会有额外代价或价值”的经典最小割模型,建立倒三角进行最小割.这个二分是显然的,一开始我也是想到了最小割的那 ...
- Lightoj1003【判环操作】
题意: 对于n个给出字符串a,b,理解成a在b之前办好这个事情,要求n个给出两个串,a都要在b之前完成: 题意: 所以一旦出现环就不行了: 以前在写最短路的时候,spfa就有一个判环,后来写着写着写到 ...
- hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)
这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ...
- hdu4888 Redraw Beautiful Drawings 最大流+判环
hdu4888 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/6553 ...
- Leetcode 166. Fraction to Recurring Decimal 弗洛伊德判环
分数转小数,要求输出循环小数 如2 3 输出0.(6) 弗洛伊德判环的原理是在一个圈里,如果一个人的速度是另一个人的两倍,那个人就能追上另一个人.代码中one就是速度1的人,而two就是速度为2的人. ...
- Leetcode 202 Happy Number 弗洛伊德判环解循环
今天先谈下弗洛伊德判环,弗洛伊德判环原来是在一个圈内有两人跑步,同时起跑,一人的速度是另一人的两倍,则那个人能在下一圈追上另一个人,弗洛伊德判环能解数字会循环出现的题,比如说判断一个链表是不是循环链表 ...
- Dwarves (有向图判环)
Dwarves 时间限制: 1 Sec 内存限制: 64 MB提交: 14 解决: 4[提交][状态][讨论版] 题目描述 Once upon a time, there arose a huge ...
随机推荐
- 第三课 Spinner的使用
Spinner的表现形式相当于C#的ComboBox,样子如下图: 但选择项的添加方式相当不一样,必须使用数据适配器,上例子. Layout--Main.axml <?xml version=& ...
- EF学习笔记(二)
DbContext 1.指定连接字符串(上一章提到) public string ConnectionStringName { get; private set; } /// <summary& ...
- 实用的WPF Xml的简易读写类以及用法示例
转自:http://www.silverlightchina.net/html/study/WPF/2012/0808/17980.html 最近真是写博客写的不可收拾,今天再来一篇. 因为做一些程序 ...
- Android SurfaceView vs TextureView
Android SurfaceView vs TextureView https://github.com/crosswalk-project/crosswalk-website/wiki/Andro ...
- python global vs nonlocal (2)
上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...
- Ubuntu安装Osmocom-BB一只猿多频点WEB脚本
LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据 库,Perl.PHP或者Pytho ...
- php空心菱形
<?php for($i=1;$i<=9;$i++){ for($j=1;$j<=9-$i;$j++){ echo " "; } for($k=1;$k<= ...
- 安装VMware Tools找不到内核头文件
http://blog.csdn.net/bobbat/article/details/38568885 安装VMware Tools,解决无法找到kernel header path的问题 安装 V ...
- 数据结构《14》----并查集 Union-Find
描述: 并查集是一种描述解决等价关系.能够方便地描述不相交的多个集合. 支持如下操作 1. 建立包含元素 x 的集合 MakeSet(x) 2. 查找给定元素所在的集合 Find(x), 返回 ...
- STL 源码分析《1》---- list 归并排序的 迭代版本, 神奇的 STL list sort
最近在看 侯捷的 STL源码分析,发现了以下的这个list 排序算法,乍眼看去,实在难以看出它是归并排序. 平常大家写归并排序,通常写的是 递归版本..为了效率的考虑,STL库 给出了如下的 归并排序 ...