Advertisement
Guest User

Untitled

a guest
May 15th, 2012
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <vector>
  5. #include <set>
  6. #include <map>
  7. #include <list>
  8. #include <queue>
  9. #include <stack>
  10. #include <memory>
  11. #include <iomanip>
  12. #include <functional>
  13. #include <new>
  14. #include <algorithm>
  15. #include <cmath>
  16. #include <cstring>
  17. #include <cstdlib>
  18. #include <cstdio>
  19. #include <climits>
  20. #include <cctype>
  21. #include <ctime>
  22.  
  23. #define REP(i, n) for((i) = 0; i < n; i++)
  24. #define FOR(i, a, n) for((i) = a; i < n; i++)
  25. #define FORR(i, a, n) for((i) = a; i <= n; i++)
  26. #define for_each(q, s) for(typeof(s.begin()) q=s.begin(); q!=s.end(); q++)
  27. #define sz(n) n.size()
  28. #define pb(n) push_back(n)
  29. #define all(n) n.begin(), n.end()
  30.  
  31. using namespace std;
  32.  
  33. typedef long long ll;
  34. typedef long double ld;
  35.  
  36. int n, a, b, c, q;
  37. vector<pair<int, int> > maze[100010];
  38. bool vis[100010];
  39. ll dist[100010];
  40.  
  41. int main(void) {
  42.     while(cin >> n && n > 0) {
  43.         for(int i = 0; i <= n; i++) {
  44.             maze[i].clear();
  45.         }
  46.         for(int i = 0; i < n; i++) {
  47.             cin >> a >> b >> c;
  48.             maze[a].push_back(make_pair(b, c));
  49.             maze[b].push_back(make_pair(a, c));
  50.         }
  51.         cin >> q;
  52.         for(int i = 0; i < q; i++) {
  53.             cin >> a >> b;
  54.             memset(dist, 63, sizeof(vis));
  55.             priority_queue<int> p;
  56.             p.push(-a);
  57.  
  58.             dist[a] = 0;
  59.  
  60.             while(!p.empty()) {
  61.                 int tmp = -p.top();
  62.                 p.pop();
  63.  
  64.                 for(int j = 0; j < (int) maze[tmp].size(); j++) {
  65.                     if(dist[tmp] + maze[tmp][j].second < dist[maze[tmp][j].first]) {
  66.                         dist[maze[tmp][j].first] = dist[tmp] + maze[tmp][j].second;
  67.                         p.push(-maze[tmp][j].first);
  68.                     }
  69.                 }
  70.             }
  71.             cout << dist[b] << endl;
  72.         }
  73.     }
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement