题意:n种钱,m种汇率转换,若ab汇率p,手续费q,则b=(a-q)*p,你有第s种钱v数量,问你能不能通过转化让你的s种钱变多?

思路:因为过程中可能有负权值,用spfa。求是否有正权回路,dis[s]是否增加。把dis初始化为0,然后转化,如果能增大就更新。每次都判断一下dis[s]。

参考:最快最好用的——spfa算法

代码:

#include<cstdio>
#include<set>
#include<vector>
#include<cmath>
#include<queue>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 100+5;
const int INF = 0x3f3f3f3f;
struct Edge{
int v;
double cost,dec;
Edge(int _v = 0,double _c = 0,double _d = 0):v(_v),cost(_c),dec(_d){}
};
vector<Edge> G[maxn];
bool vis[maxn]; //在队列标志
//int cnt[maxn]; //每个点入队列次数
double dis[maxn];
bool spfa(int start,double V,int n){
memset(vis,false,sizeof(vis));
for(int i = 1;i <= n;i++) dis[i] = 0;
vis[start] = true;
dis[start] = V;
queue<int> q;
while(!q.empty()) q.pop();
q.push(start);
//memset(cnt,0,sizeof(cnt));
//cnt[start] = 1;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = false;
for(int i = 0;i < G[u].size();i++){
int v = G[u][i].v;
double c = G[u][i].cost;
double d = G[u][i].dec;
if(dis[v] < (dis[u] - d)*c){
dis[v] = (dis[u] - d)*c;
if(!vis[v]){
q.push(v);
vis[v] = true;
/*if(++cnt[v] > n)
return false;*/
}
}
if(dis[start] > V)
return true;
}
}
return false;
}
void addEdge(int u,int v,double cost,double dec){
G[u].push_back(Edge(v,cost,dec));
}
int main(){
int n,m,s;
double V;
while(scanf("%d%d%d%lf",&n,&m,&s,&V) != EOF){
for(int i = 1;i <= n;i++) G[i].clear();
for(int i = 0;i < m;i++){
int u,v;
double c,d;
scanf("%d%d%lf%lf",&u,&v,&c,&d);
addEdge(u,v,c,d);
scanf("%lf%lf",&c,&d);
addEdge(v,u,c,d);
}
bool flag = spfa(s,V,n);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}

POJ 1860 Currency Exchange(最短路&spfa正权回路)题解的更多相关文章

  1. POJ 3259 Wormholes(最短路&spfa正权回路)题解

    题意:给你m条路花费时间(双向正权路径),w个虫洞返回时间(单向负权路径),问你他能不能走一圈回到原点之后,时间倒流. 思路:题意有点难看懂,我们建完边之后找一下是否存在负权回路,存在则能,反之不能. ...

  2. POJ 1860 Currency Exchange 最短路+负环

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

  3. POJ 1860 Currency Exchange (最短路)

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  4. poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)

    感觉最短路好神奇呀,刚开始我都 没想到用最短路 题目:http://poj.org/problem?id=1860 题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 mo ...

  5. POJ 1860 Currency Exchange 最短路 难度:0

    http://poj.org/problem?id=1860 #include <cstdio> //#include <queue> //#include <deque ...

  6. 最短路(Bellman_Ford) POJ 1860 Currency Exchange

    题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...

  7. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)

    POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...

  8. HDU - 1317 ~ SPFA正权回路的判断

    题意:有最多一百个房间,房间之间连通,到达另一个房间会消耗能量值或者增加能量值,求是否能从一号房间到达n号房间. 看数据,有定5个房间,下面有5行,第 iii 行代表 iii 号 房间的信息,第一个数 ...

  9. 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 19881   Accepted: 711 ...

随机推荐

  1. AS3在函数内部移除监听(arguments.callee)

    scene.addEventListener(Event.ADDED_TO_STAGE, function():void { scene.removeEventListener(Event.ADDED ...

  2. 【BZOJ3939】[Usaco2015 Feb]Cow Hopscotch 动态规划+线段树

    [BZOJ3939][Usaco2015 Feb]Cow Hopscotch Description Just like humans enjoy playing the game of Hopsco ...

  3. Andorid- 反序列化,采用pull解析 xml 文件

    MainActivity.java 主入口,通过获得 XML文件 ,然后将解析后的文件标签以及文本内容拼接到 StringBuffer中,最后显示在TextView上 package com.exam ...

  4. angularJS指令系统---Directive

    指令:Directive angularJS 有一套完整的,可拓展的,用来帮助web应用开发的指令集: 在建立DOM期间,和HTML关联着的指令会被检测到,并被执行: 在angularJS中将前缀为 ...

  5. 转载:隐式Intent

    一.隐式意图介绍 显式意图我们前面已经提到,形如: Intent intent = new Intent(); intent.setClass(this,Other.class); //此句表示显式意 ...

  6. nginx repos

    vim /etc/yum.repos.d/nginx.repo 然后将下面的内容复制进去: [nginx] name=nginx repo baseurl=http://nginx.org/packa ...

  7. 双态运维分享之:业务场景驱动的服务型CMDB

    最近这几年,国内外CMDB失败的案例比比皆是,成功的寥寥可数,有人质疑CMDB is dead?但各种业务场景表明,当下数据中心运维,CMDB依然是不可或缺的一部分,它承载着运维的基础,掌握运维的命脉 ...

  8. scrapy-redis分布式爬虫

    简介 Scrapy-Redis则是一个基于Redis的Scrapy分布式组件.它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule), 并对爬取产生的项目(items) ...

  9. day08:软件系统的体系结构&Tomcat详解&Web应用&http协议

        day08 软件系统体系结构     常见软件系统体系结构B/S.C/S 1.1 C/S C/S结构即客户端/服务器(Client/Server),例如QQ: 需要编写服务器端程序,以及客户端 ...

  10. 【python】Python3 循环语句

    [python]几种常见的循环 注意:如果涉及到程序中print语句中含有%d,%s,那么要在脚本最开始写语句:#coding=utf-8,才能够正常输出想要的数字或者字符串. Python3 循环语 ...