链接:poj 1860

题意:给定n中货币。以及它们之间的税率。A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量,

求货币S通过若干此转换,再转换为原本的货币时是否会添加

分析:这个题就是推断是否存在正权回路。能够用bellman-ford算法,只是松弛条件相反

也能够用SPFA算法,推断经过转换后,转换为原本货币的值是否比原值大、、、

bellman-ford    0MS

#include<stdio.h>
#include<string.h>
struct stu
{
int a,b;
double r,c;
}edge[205];
double v,dis[105];
int s;
int bellmanford(int n,int m)
{
int i,j,flag=0;
memset(dis,0,sizeof(dis));
dis[s]=v;
for(i=1;i<=n-1;i++)
for(j=1;j<=m;j++)
if(dis[edge[j].a]&&(dis[edge[j].a]-edge[j].c)*edge[j].r>dis[edge[j].b])
dis[edge[j].b]=(dis[edge[j].a]-edge[j].c)*edge[j].r;
for(j=1;j<=m;j++)
if(dis[edge[j].a]&&(dis[edge[j].a]-edge[j].c)*edge[j].r>dis[edge[j].b]){
flag=1;
break;
}
return flag;
}
int main()
{
int i,j,l,r,n,m,flag;
while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF){
j=1;
for(i=1;i<=m;i++){
scanf("%d%d",&l,&r);
scanf("%lf%lf",&edge[j].r,&edge[j].c);
edge[j].a=l;
edge[j].b=r;
j++;
edge[j].a=r;
edge[j].b=l;
scanf("%lf%lf",&edge[j].r,&edge[j].c);
j++;
}
flag=bellmanford(n,2*m);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

SPFA+邻接表  16MS

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct stu
{
int a,b;
double r,c;
}edge[205];
double v,dis[105];
int s,first[205],next[205],vis[105];
int SPFA(int n,int m)
{
int i,pos;
queue<int> q;
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[s]=v;
q.push(s);
vis[s]=1;
while(!q.empty()){
pos=q.front();
q.pop();
vis[pos]=0;
i=first[pos];
while(i!=-1){
if((dis[pos]-edge[i].c)*edge[i].r>dis[edge[i].b]){
dis[edge[i].b]=(dis[pos]-edge[i].c)*edge[i].r;
if(!vis[edge[i].b]){
q.push(edge[i].b);
vis[edge[i].b]=1;
}
}
i=next[i];
}
if(dis[s]>v)
return 1;
}
return 0;
}
int main()
{
int i,j,l,r,n,m,flag;
while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF){
j=1;
for(i=1;i<=m;i++){
scanf("%d%d",&l,&r);
scanf("%lf%lf",&edge[j].r,&edge[j].c);
edge[j].a=l;
edge[j].b=r;
j++;
edge[j].a=r;
edge[j].b=l;
scanf("%lf%lf",&edge[j].r,&edge[j].c);
j++;
}
memset(first,-1,sizeof(first));
for(i=1;i<=2*m;i++){
next[i]=first[edge[i].a];
first[edge[i].a]=i;
}
flag=SPFA(n,2*m);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)的更多相关文章

  1. POJ 1860 Currency Exchange (SPFA松弛)

    题目链接:http://poj.org/problem?id=1860 题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元.问你最后经过任意转换可不可能有升值.下面给你货币u和货币v,r1是u ...

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

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

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

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

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

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

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

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

  6. POJ 1860 Currency Exchange(最短路&spfa正权回路)题解

    题意:n种钱,m种汇率转换,若ab汇率p,手续费q,则b=(a-q)*p,你有第s种钱v数量,问你能不能通过转化让你的s种钱变多? 思路:因为过程中可能有负权值,用spfa.求是否有正权回路,dis[ ...

  7. (简单) POJ 1860 Currency Exchange,SPFA判圈。

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

  8. POJ 1860 Currency Exchange【SPFA判环】

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

  9. Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)

    一.题意 有多个货币交易点,每个只能互换两种货币,兑换的汇率不同,并收取相应的手续费.有N种货币,假定你拥有第S中,数量为V,有M个兑换点.问你能不能通过兑换操作使你最后拥有的S币比起始的时候多. 二 ...

随机推荐

  1. java Mybatis框架动态SQL

    1.if+where <select id="getgoods" resultType="Goods" > select * from goods ...

  2. H5定位

    百度地图javaScript API 一.在html文件中引入 <script src="http://api.map.baidu.com/api?ak=Uk9tDddYkrQImXw ...

  3. [转载] 深入了解Java ClassLoader、Bytecode 、ASM、cglib

    转载自http://www.iteye.com/topic/98178   一.Java ClassLoader 1,什么是ClassLoader 与 C 或 C++ 编写的程序不同,Java 程序并 ...

  4. (二)SVN的安装

    1,首先下载SVN的服务端和客户端地址如下http://subversion.apache.org/packages.html.进入网址后滚动到浏览器最底部. (因为我的系统是Windows所以我选择 ...

  5. 重构手法之Split Temporary Variable(分解临时变量)

    返回总目录 本小节目录 Split Temporary Variable(分解临时变量) Remove Assignments to Parameters(移除对参数的赋值) 6.6Split Tem ...

  6. 使用Jedis操作redis 缓存

    案例:http://blog.csdn.net/linlzk/article/details/41801391 Redis是一个开源的Key-Value数据缓存,和Memcached类似. Redis ...

  7. tsung压力测试——tcp测试tsung.xml配置模版说明

    <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1 ...

  8. C# 串口接收数据中serialPort.close()死锁

    最近在做一个有关高铁模拟仓显示系统的客户端程序,在这个程序中要运用串口serialPort传输数据,因为每次接收数据结束后要更新UI界面,所以就用到了的Invoke,将更新UI的程序代码封装到一个方法 ...

  9. .net 系列:Expression表达式树、lambda、匿名委托 的使用

    首先定义一个泛型委托类型,如下: public delegate T Function<T>(T a, T b); 实现泛型委托的主体代码,并调用: public static strin ...

  10. c语言的typedef

    一.typedef作用简介 1.作用:给已经存在的类型起一个新的名称 2.使用场合: 1> 基本数据类型 2> 指针 3> 结构体 4> 枚举 5> 指向函数的指针 * ...