2014-09-11 22:42:28
思路:用这题熟悉了下map,建好图后就是裸地Floyd,WA 3发,最后发现是自己二货地想:拖车把所有车拖着一起返回garage。。。。QAQ,应该一辆一辆拖啊骚年。
1 /************************************************************************* 2 > File Name: 2923.cpp 3 > Author: Nature 4 > Mail: 564374850@qq.com 5 > Created Time: Thu 11 Sep 2014 09:26:08 PM CST 6 ************************************************************************/ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <cstdlib> 11 #include <cmath> 12 #include <vector> 13 #include <queue> 14 #include <string> 15 #include <map> 16 #include <iostream> 17 #include <algorithm> 18 using namespace std; 19 typedef long long ll; 20 const int INF = 1 << 29; 21 22 int Case,N,C,R,cnt,p; 23 int arr[1005],dis[105][105]; 24 map<string,int> mp; 25 26 void Floyd(){ 27 for(int k = 1; k <= p; ++k) 28 for(int i = 1; i <= p; ++i) 29 for(int j = 1; j <= p; ++j) if(dis[i][k] < INF && dis[k][j] < INF){ 30 dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]); 31 } 32 } 33 34 void Init(){ 35 mp.clear(); 36 cnt = p = 0; 37 for(int i = 0; i < 105; ++i){ 38 for(int j = 0; j < 105; ++j) dis[i][j] = INF; 39 dis[i][i] = 0; 40 } 41 } 42 43 int main(){ 44 string name,name2,tmp; 45 int a,b; 46 while(scanf("%d%d%d",&N,&C,&R) != EOF){ 47 if(N == 0 && C == 0 && R == 0) break; 48 Init(); 49 for(int i = 1; i <= C + 1; ++i){ 50 cin >> name; 51 if(mp.find(name) == mp.end()) 52 mp[name] = ++p; 53 arr[++cnt] = mp[name]; 54 } 55 arr[++cnt] = 1; 56 for(int i = 1; i <= R; ++i){ 57 cin >> name >> tmp >> name2; 58 if(mp.find(name) == mp.end()) 59 mp[name] = ++p; 60 a = mp[name]; 61 if(mp.find(name2) == mp.end()) 62 mp[name2] = ++p; 63 b = mp[name2]; 64 int val = tmp[2] - '0',ind = 3; 65 while(tmp[ind] >= '0' && tmp[ind] <= '9'){ 66 val = val * 10 + tmp[ind] - '0'; 67 ind++; 68 } 69 if(tmp[0] == '<') dis[b][a] = min(dis[b][a],val); 70 if(tmp[tmp.size() - 1] == '>') dis[a][b] = min(dis[a][b],val); 71 } 72 Floyd(); 73 int ans = 0; 74 for(int i = 2; i <= cnt; ++i){ 75 ans += dis[1][arr[i]] + dis[arr[i]][1]; 76 } 77 printf("%d. %d\n",++Case,ans); 78 } 79 return 0; 80 }