POJ 2240
1 #include<iostream> 2 #include<stdio.h> 3 #include<string> 4 #include<algorithm> 5 #include<map> 6 #define MAXN 35 7 using namespace std; 8 9 map<string,int> coll; 10 map<string,int>::iterator pos1,pos2; 11 double _m[MAXN][MAXN]; 12 bool _wall[MAXN][MAXN]; 13 bool give_num(int n); 14 int main() 15 { 16 //freopen("acm.acm","r",stdin); 17 int n; 18 int edge; 19 int i; 20 int j; 21 int k; 22 double value; 23 string s; 24 string u; 25 string v; 26 int time = 0; 27 while(1) 28 { 29 //memset(_m,-1.0,sizeof(_m)); 30 cin>>n; 31 //getchar(); 32 if(!n) 33 break; 34 for(i = 0; i < n; ++i) 35 { 36 for(j = 0; j < n; ++ j) 37 { 38 _m[i][j] = -1.0; 39 } 40 } 41 42 cout<<"Case "<<++ time<<": "; 43 for(i = 0; i < n; ++ i) 44 { 45 cin>>s; 46 coll.insert(pair<string,int>(s,i)); 47 } 48 cin>>edge; 49 for(i = 0; i < edge; ++ i) 50 { 51 cin>>u>>value>>v; 52 pos1 = coll.find(u); 53 pos2 = coll.find(v); 54 // cout<<pos1->second<<"---------------"<<pos2->second<<endl; 55 _m[pos1->second][pos2->second] = value; 56 // _m[pos2->second][pos1->second] = value; 57 } 58 // for(i = 0; i < n; ++ i) 59 // { 60 // for(j = 0; j < n; ++ j) 61 // { 62 // cout<<_m[i][j]<<" "; 63 // } 64 // cout<<endl; 65 // } 66 if(give_num(n)) 67 cout<<"Yes"<<endl; 68 else 69 cout<<"No"<<endl; 70 coll.clear(); 71 } 72 } 73 74 bool give_num(int n) 75 { 76 int k; 77 int i; 78 int j; 79 double tem; 80 for(k = 0; k < n; ++ k) 81 { 82 for(i = 0; i < n; ++ i) 83 { 84 for(j = 0; j < n; ++ j) 85 { 86 // cout<<"00000000000000 "<<1.0/(_m[i][k] * _m[k][j])<<"--------"<<_m[j][i]<<endl; 87 if(_m[i][k] != -1.0 && _m[k][j] != -1.0 ) 88 { 89 if(_m[j][i] != -1.0) 90 { 91 if(( _m[i][k] * _m[k][j]) * _m[j][i] > 1.0) 92 { 93 // cout<<"00000000000000 "<<1.0/(_m[i][k] * _m[k][j])<<endl; 94 return true; 95 } 96 } 97 // else 98 // { 99 100 //} 101 if(_m[i][k] * _m[k][j] > _m[i][j]) 102 { 103 _m[i][j] = ( _m[i][k] * _m[k][j]); 104 } 105 } 106 } 107 } 108 } 109 return false; 110 }