poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
题意:给定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)的更多相关文章
- POJ 1860 Currency Exchange (SPFA松弛)
题目链接:http://poj.org/problem?id=1860 题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元.问你最后经过任意转换可不可能有升值.下面给你货币u和货币v,r1是u ...
- POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)
POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...
- 最短路(Bellman_Ford) POJ 1860 Currency Exchange
题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...
- HDU - 1317 ~ SPFA正权回路的判断
题意:有最多一百个房间,房间之间连通,到达另一个房间会消耗能量值或者增加能量值,求是否能从一号房间到达n号房间. 看数据,有定5个房间,下面有5行,第 iii 行代表 iii 号 房间的信息,第一个数 ...
- 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 19881 Accepted: 711 ...
- POJ 1860 Currency Exchange(最短路&spfa正权回路)题解
题意:n种钱,m种汇率转换,若ab汇率p,手续费q,则b=(a-q)*p,你有第s种钱v数量,问你能不能通过转化让你的s种钱变多? 思路:因为过程中可能有负权值,用spfa.求是否有正权回路,dis[ ...
- (简单) POJ 1860 Currency Exchange,SPFA判圈。
Description Several currency exchange points are working in our city. Let us suppose that each point ...
- POJ 1860 Currency Exchange【SPFA判环】
Several currency exchange points are working in our city. Let us suppose that each point specializes ...
- Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)
一.题意 有多个货币交易点,每个只能互换两种货币,兑换的汇率不同,并收取相应的手续费.有N种货币,假定你拥有第S中,数量为V,有M个兑换点.问你能不能通过兑换操作使你最后拥有的S币比起始的时候多. 二 ...
随机推荐
- 第三方软件内嵌IE出现纵向滚动条消失的BUG,奇葩的IE BUG 真是无奇不有
混了这么久 竟然还有这样难以解决的BUG,最后都跑到英文的MSDN上提问了,因为谷歌都谷不出朕的忧伤了,有木有. 提问原文如下:https://social.msdn.microsoft.com/Fo ...
- CSS系列------选择器和选择器的优先级
1.1.基本选择器 通配符选择器(*) 通配符选择器的使用方法如下 *{margin:0px; padding:0px;} //*代表所有的 ID选择器(#) ID选择器的使用方式如下: * ...
- ThreadLocal 原理解析
1.对Thread local 理解 ThreadLocal 是为了解决线程间同步而创建的一个新的思路.简单来说就是每个线程都保存一个变量副本. 如果在Thread 内部定义一个field变量,也可以 ...
- Python入门学习(二)
1 字典 1.1 字典的创建和访问 字典不同于前述的序列类型,它是一种映射类型.它的引入是为了简化定义索引值和元素值存在特定关系的定义和访问问题. 字典的定义形式为:字典变量名 = {key1:val ...
- 我是如何理解Android的Handler模型_2
对比例程说明,如: 例:在新新线程中替换TextView显示内容. 界面如下,单击按键后original data 替换为 changed data Handler Message部分实现步骤: 1. ...
- Tomcat部署项目乱码问题总结
打包好的war包放在tomcat下,有时会出现中文乱码的情况.首先应当确定项目的编码格式,tomcat的编码格式,以及cmd命令行的编码格式. 项目编码 将要输出到控制台或日志的字符串转为UTF-8 ...
- .Net开发小技巧
.NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系, ...
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- ssm+maven 框架整合
开篇简言:maven的存在让ssm框架简单了一个量级,BaseDao的存在又让项目简化了一个量级,希望看到这篇文章的都能深入的了解上面两项,好了,进入主题,构造一个ssm框架 1.准备工具 mave ...
- Bin、App_Data等文件夹详述(转自http://blog.csdn.net/zzjiadw/article/details/6801506)
ASP.NET应用程序和ASP.Net网站所共有的文件: App_Browsers 包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件.有关更多信息,请参见浏 ...