ZOJ 1092 Arbitrage (floyd变形)
2010-08-08 13:32
239 查看
给出各种货币的汇率,你可以在各种货币之间转换,看能不能用某种交换方法,能使你最终得到的钱比刚开始得多,当然是同一种货币的时候。
如果平常做最短路径肯定不知道可以用floyd来做,我之前看了一个paper,上面说到,松弛过程中的
d[v] < d[u] + w(v,u)
这里面的加号可以延伸为各种形式的运算的,当时没注意,想到应该没有什么用,碰巧在这道题中floyd也可以变换符号。。挺神奇的,记住记住,以后可能用到。。
如果平常做最短路径肯定不知道可以用floyd来做,我之前看了一个paper,上面说到,松弛过程中的
d[v] < d[u] + w(v,u)
这里面的加号可以延伸为各种形式的运算的,当时没注意,想到应该没有什么用,碰巧在这道题中floyd也可以变换符号。。挺神奇的,记住记住,以后可能用到。。
#include<stdio.h> #include<string.h> int n,i,j,k,edges; int from,to; double weight; int flag,start = 1; double biao[31][31]; char kindof[31][50]; char t[50]; int find(char *a) { int i; for( i = 1; i <= n; i++ ) if(strcmp(a,kindof[i]) == 0) return i; } int main(void) { while( scanf("%d",&n) != EOF && n) { for( i = 1; i <= 30; i++ ) for( j = 1; j <= 30 ; j++ ) biao[i][j] = 0; for( i = 1; i <= 30; i++ ) biao[i][i] = 1; for( i = 1; i <= n; i++ ) scanf("%s",kindof[i]); scanf("%d",&edges); for( i = 1; i <= edges; i++ ) { scanf("%s",t); from = find(t); scanf("%lf%s",&weight,t); to = find(t); biao[from][to] = weight; } for( k = 1; k <= n; k++ ) for( i = 1; i <= n; i++ ) for( j = 1; j <= n; j++ ) if( biao[i][j] < biao[i][k] * biao[k][j] ) biao[i][j] = biao[i][k] * biao[k][j]; printf("Case %d: ",start++); for( i = 1, flag = 0; i <= n; i++ ) if( biao[i][i] > 1.0 ) {flag = 1;printf("Yes/n");break;} if( !flag ) printf("No/n"); } return 0; }
相关文章推荐
- zoj 1092 || poj 2240 Arbitrage(Floyd)
- ZOJ 1092 Arbitrage 【Floyd-Warshal】
- zoj 1092 Arbitrage(最短路,floyd)
- ZOJ Problem Set - 1092 Arbitrage (Floyd)
- zoj 1092 Arbitrage(最短路)
- zoj 1092 && oij 2240 Arbitrage
- Arbitrage - UVa 104 Floyd变形
- poj2240 Arbitrage 图论,Floyd变形
- zoj-1092-Arbitrage
- POJ 2240 Arbitrage (floyd变形)
- ZOJ 2797 ||POJ 2472 floyd变形
- zoj 1092||poj 2240 Arbitrage( bellman 最短路)
- zoj1092-Arbitrage
- 【变形Floyd】HDU-1217 Arbitrage
- zoj 1092 && poj 2240 Arbitrage (floyd算法)
- zoj 1092 Arbitrage
- poj2240&zoj1092 Arbitrage(Bellman-Ford)
- zoj 1092 Arbitrage
- zoj 1092 Arbitrage (poj 2240)
- ZOJ 2797 ||POJ 2472 floyd变形