#include <iostream> #include "vector" using namespace std; /** * kkmd66 四刷 * @return */ int main() { int n, t, count = 0; while (cin >> n >> t && n != 0 && t != 0) { //计次 count++; //存储图,已剔除重复 vector<vector<int>> map(n - 1); for (int i = 0; i < n - 1; ++i) { int a, b, value; cin >> a >> b >> value; if (i == 0) { map[i].push_back(a); map[i].push_back(b); map[i].push_back(value); } else { if (a == map[i - 1][0] && b == map[i - 1][1]) { if (value < map[i - 1][2]) { map[i - 1][2] = value; } i--; } else { map[i].push_back(a); map[i].push_back(b); map[i].push_back(value); } } } //存储路线 int w, e; cin >> w >> e; vector<vector<int>> route(w); for (int i = 0; i < w; ++i) { int a, b; cin >> a >> b; route[i].push_back(a); route[i].push_back(b); } //剔除重复路线 for (int i = 0; i < route.size() - 1; ++i) { for (int j = i + 1; j < route.size(); ++j) { if ((route[j][0] == route[i][0] && route[j][1] == route[i][1]) || (route[j][0] == route[i][1] && route[j][1] == route[i][0])) { route[j][0] = -1; route[j][1] = -1; } } } //计算路径 int sum = 0; for (int i = 0; i < route.size(); ++i) { if (route[i][0] != -1) { for (int j = 0; j < map.size(); ++j) { if (route[i][0] ==map[j][0] && route[i][1] ==map[j][1] ) { sum += map[j][2]; break; } } if (route[i][1] == e) break; } } //输出 cout <<"Case #"<<count<<": "<< sum << endl; } return 0; } |
Double click to view unformatted code.