当前位置: 代码迷 >> 综合 >> Hdu--Arbitrage(Floyd)
  详细解决方案

Hdu--Arbitrage(Floyd)

热度:47   发布时间:2023-12-22 02:24:26.0

原题链接
floyd 变形,没什么好说的
输的时候费老半天气 还是太菜。。
代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
double map[50][50];
int n,inf=9999999,flag;
void floyd()
{
    int i,j,k;for(k=1;k<=n;k++){
    for(i=1;i<=n;i++){
    for(j=1;j<=n;j++){
    if(map[i][j]<map[i][k]*map[k][j])map[i][j]=map[i][k]*map[k][j];}}}for(i=1;i<=n;i++){
    if(map[i][i]>1){
    flag=1;break;}}
}
int main()
{
    int i,j,q=1,m;double cos;char s[30][30],s1[30],s2[30];while(~scanf("%d",&n)&&n){
    getchar();memset(map,0,sizeof(map));for(i=1;i<=n;i++)scanf("%s",s[i]);/* for(i=1;i<=n;i++)printf("%s\n",s[i]);*/scanf("%d",&m);while(m--){
    getchar();scanf("%s %lf %s",s1,&cos,s2);for(i=1;i<=n;i++){
    if(strcmp(s[i],s1)==0)break;}for(j=1;j<=n;j++){
    if(strcmp(s[j],s2)==0)break;}map[i][j]=cos;//printf("%d %lf %d\n",i,cos,j);}/* for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%f ",map[i][j]);}printf("\n");}*/flag=0;floyd();printf("Case %d: ",q++);if(flag)  printf("Yes\n");else  printf("No\n");}return 0;
}