poj 1860 最短路
2013-12-14 20:01
323 查看
题目大意:给你多个货币交换点,每次从一个货币到另一个货币的都会产生手续费和汇率,现在给你一个确定的货币和这个货币的数量,问你,通过交换,最后再返回题目给出的那个确定的货币,如果货币数量增加了则输出yes否则输出no。
注意:1、只能用double如果用其他会出现精度问题。
这个题目的关键点在于反向用mellman_ford。
代码:
#include
using namespace std;
int t ;
int farm1[10010] , farm2[10010] ;
double w[10010][2];
double dist[120] ;
int main()
{
int n , m , s , i , j =
0;
double v;
cin>>n>>m>>s>>v;
int x = 0, y = 0;
double rate = 0.0, com =
0.0;
for(i = 0 ; i < m;i++)
{
cin>>x>>y>>rate>>com;
farm1[j] = x
; farm2[j] = y;
w[j][0] =
rate ;
w[j][1] = com
;
j += 1;
cin>>rate>>com;
farm2[j] = x;
farm1[j] = y;
w[j][0] =
rate; w[j][1] = com ;
j += 1;
}
for(i = 1 ; i <= n ;
i++)
dist[i] = 0.0
;
dist[s] = v;
for(int k = 1 ; k < n;
k++)
{
for(i = 0 ; i
< j; i++)
{
x
= farm1[i] ; y = farm2[i];
if(dist[y]
< (dist[x]-w[i][1])*w[i][0])
dist[y] = (dist[x]-w[i][1])*w[i][0];
}
}
int d = 0 ;
for(i = 0 ; i < j ;
i++)
{
x
= farm1[i] ; y = farm2[i];
if(dist[y]
< (dist[x]-w[i][1])*w[i][0] ) { d = 1
;break;}
}
if(d )
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
注意:1、只能用double如果用其他会出现精度问题。
这个题目的关键点在于反向用mellman_ford。
代码:
#include
using namespace std;
int t ;
int farm1[10010] , farm2[10010] ;
double w[10010][2];
double dist[120] ;
int main()
{
int n , m , s , i , j =
0;
double v;
cin>>n>>m>>s>>v;
int x = 0, y = 0;
double rate = 0.0, com =
0.0;
for(i = 0 ; i < m;i++)
{
cin>>x>>y>>rate>>com;
farm1[j] = x
; farm2[j] = y;
w[j][0] =
rate ;
w[j][1] = com
;
j += 1;
cin>>rate>>com;
farm2[j] = x;
farm1[j] = y;
w[j][0] =
rate; w[j][1] = com ;
j += 1;
}
for(i = 1 ; i <= n ;
i++)
dist[i] = 0.0
;
dist[s] = v;
for(int k = 1 ; k < n;
k++)
{
for(i = 0 ; i
< j; i++)
{
x
= farm1[i] ; y = farm2[i];
if(dist[y]
< (dist[x]-w[i][1])*w[i][0])
dist[y] = (dist[x]-w[i][1])*w[i][0];
}
}
int d = 0 ;
for(i = 0 ; i < j ;
i++)
{
x
= farm1[i] ; y = farm2[i];
if(dist[y]
< (dist[x]-w[i][1])*w[i][0] ) { d = 1
;break;}
}
if(d )
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
相关文章推荐
- poj 3259 最短路(带负环)
- poj 3080
- poj 1035
- poj 2965
- 欢迎您在新浪博客安家
- UnsupportedOperationException
- 黑马程序员—GUI(键盘事件)小例子
- 嵌入式学习之路(十)——C语言学习(5)
- U盘装win7 “安装程序无法创建新的系统分区,也无法定位现有的系统分区“最终解决方法
- 14.java NumberFormat 类
- 给iOS开发新手送点福利,简述UITextField的属性和用法
- 13.java MessageFormat 类
- 黑马程序员—GUI(菜单)小例子
- S3C6410+WinCE+GPIO+流驱动+详细过程
- 项目视频讲解_360问答系统
- Centos yum 错误
- java Math类
- test
- 使用 Spring 2.5 TestContext 测试框架
- 简单的实例来理解WCF 数据服务(WCF DS)