【题目大意】

给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换,能否赚。

【思路】

反向运用SPFA,判断是否有正环。每次队首元素出队之后,判断一下到源点s的距离是否增大,增大则返回true。一开始判断正环的思路如果有一个元素入队超过n次,则说明存在正环。后来发现这个思路是不适用的,因为这个正环中并不一定包含源点..要注意的是:题目中的m并不是边数,边数应该是m*2!所以开数组的时候要尤其注意数组不能开小了。由于C++的判定中如果没有崩掉,不会返回RE只会返回WA,我纠结了好久才找出错因。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct Rec
{
int ori,des;
double len,val;
};
const int MAXN=+;
int first[MAXN],next[MAXN*];
/*用于存储邻接表*/
double dis[MAXN];
/*存储从s出发到达当前货币的最大值*/
int vis[MAXN];
/*判断某一个点是否已经存在于队列中*/
Rec edge[MAXN*];
int n,m,s;
double v; bool SPFA()
{
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
queue<int> que; dis[s]=v;
/*默认到持有货币的距离为持有货币的价值*/
vis[s]=;
que.push(s); while (!que.empty())
{
int pos=que.front();
int k=first[pos];
vis[pos]=;
que.pop();
while (k!=-)
{
if (dis[edge[k].des]<(dis[pos]-edge[k].len)*edge[k].val)
{
dis[edge[k].des]=(dis[pos]-edge[k].len)*edge[k].val;
if (!vis[edge[k].des])
{
vis[edge[k].des]=;
que.push(edge[k].des);
}
}
k=next[k];
}
if (dis[s]>v) return true;
}
return false;
} int main()
{
scanf("%d%d%d%lf",&n,&m,&s,&v);
s--;
memset(first,-,sizeof(first)); for (int i=;i<m;i++)
{
int a,b;
double c1,r1,c2,r2;
scanf("%d%d%lf%lf%lf%lf",&a,&b,&r1,&c1,&r2,&c2);
a--;
b--;
edge[i*].ori=edge[i*+].des=a;
edge[i*].des=edge[i*+].ori=b;
edge[i*].val=r1;
edge[i*].len=c1;
edge[i*+].val=r2;
edge[i*+].len=c2; next[i*]=first[a];
first[a]=i*;
next[i*+]=first[b];
first[b]=i*+;
}
m=m*+;
if (SPFA()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
//system("pause");
return ;
}

【SPFA】POJ1860-Currency Exchange的更多相关文章

  1. 【POJ】1860 Currency Exchange

    真是气skr人..没把d[]换成double...de了一上午的bug// 记得用G++提交啊 题目链接:http://poj.org/problem?id=1860 题意:告诉你n个点,m条路.起始 ...

  2. POJ1860 Currency Exchange【最短路-判断环】

    Several currency exchange points are working in our city. Let us suppose that each point specializes ...

  3. poj1860 Currency Exchange(spfa判断正环)

    Description Several currency exchange points are working in our city. Let us suppose that each point ...

  4. POJ1860 Currency Exchange —— spfa求正环

    题目链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Tota ...

  5. 【SPFA】 最短路计数

    最短路计数 [问题描述]   给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式]   输入第一行包含2个正整数N,M,为图的顶点数与边数. ...

  6. POJ1860——Currency Exchange(BellmanFord算法求最短路)

    Currency Exchange DescriptionSeveral currency exchange points are working in our city. Let us suppos ...

  7. sendrose【SPFA】

    之前看到一题需要并查集+SPFA,然后就特别囧的发现自己SPFA这个历史遗留问题已经不知道怎么打了╮(╯▽╰)╭ 就果断挑了一题特别裸的SPFA赶紧搞搞掉,顺便自己乱YY下学SPFA的笔记,免得自己下 ...

  8. 【SPFA】POJ1511-Invitation Cards

    [题目大意] 给出一张有向图,以1位源点,求“从源点出发到各点的距离”和“与各点返回源点的距离和”相加得到的和. [思路] 毫无疑问是最短路径,但是这数据量就算是SPFA也绝壁会超时啊,抱着必死的心态 ...

  9. POJ1860 Currency Exchange(bellman-ford)

    链接:http://poj.org/problem?id=1860 Currency Exchange Description Several currency exchange points are ...

随机推荐

  1. Ubuntu自定义终端窗口位置

    方法一: 自定义终端启动快捷键 具体方法是自定义一个快速启动终端的快捷键,附带设置终端启动时的位置参数.首先获得需要放置窗口的目标位置信息,可以通过终端命令“ xwininfo ”来获得.步骤是首先打 ...

  2. [转] A*寻路算法C++简单实现

    参考文章: http://www.policyalmanac.org/games/aStarTutorial.htm   这是英文原文<A*入门>,最经典的讲解,有demo演示 http: ...

  3. Maven仓库国内镜像站

    感谢阿里巴巴,搭建并公开了Maven仓库的国内镜像站.话外:使用Maven的官方仓库真的是太slow了! 在<Maven Root>/conf/settings.xml中的<mirr ...

  4. Ubuntu下安装arm-linux-gnueabi-xxx编译器【转】

    转自:http://blog.csdn.net/real_myth/article/details/51481639 from: http://www.linuxdiyf.com/linux/1948 ...

  5. [转]关于MyEclipse下的项目无法使用BASE64Encoder问题的解决办法

    [链接] http://blog.csdn.net/longlonglongchaoshen/article/details/75087616

  6. 分析new delete 的本质

    在程序设计中,数据可能会存在不同的内存空间,如函数栈 堆   全局变量区  ,今天我们来分析一下C++中堆分配方式和C语言的堆分配方式异同,从而更好的理解new  delete本质 C语言使用mall ...

  7. cuowu

    ngFor不能用于Object rowspan colspan不能绑定变量,要用attr.colspan https://stackoverflow.com/questions/35615751/wh ...

  8. centos7.2下caffe的安装及编译

    1.前期准备 安装依赖 sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5 ...

  9. Codeforces 777E - Hanoi Factory(贪心+栈)

    题目链接:http://codeforces.com/problemset/problem/777/E 题意:有n个环给你内环半径.外环半径和高度,叠这些环还要满足以下要求: ①:下面的环的外径要&g ...

  10. 编译原理之正则表达式转NFA

    本文转载自http://chriszz.sinaapp.com/?p=257 输入一个正则表达式,输出一个NFA. 我的做法:输入一个字符串表示正则,输出则是把输出到一个.dot文件中并将dot文件编 ...