Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:256000000")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _CRT_SECURE_NO_DEPRECATE
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<cstdlib>
  7. #include<string>
  8. #include<cstring>
  9. #include<algorithm>
  10. #include<cmath>
  11. #include <set>
  12. #include <queue>
  13. #include <map>
  14. #include <vector>
  15. #include <unordered_map>
  16. #include <assert.h>
  17.  
  18. using namespace std;
  19.  
  20. #define mp make_pair
  21. #define pub push_back
  22. #define con continue
  23. #define forn(i, n) for (int i = 0; i < int(n); ++i)
  24. #define fornr(i, n) for (int i = n - 1; i >= 0; --i)
  25. #define forab(i, a, b) for (int i = (a); i <= int(b); ++i)
  26. typedef long long ll;
  27. typedef pair <int, int> pii;
  28. typedef vector <int> vi;
  29. typedef vector < pii > vii;
  30. typedef vector < vector < int> > vvi;
  31. typedef vector < vector < pair < int, int > > > vvii;
  32.  
  33. const int ZEROS = (int)(1E+2 * 4 + 100);
  34. const int INF = (int)1E+9;
  35.  
  36. int cnt;
  37. map <int, string> M1;
  38. map <string, int > M2;
  39. ll d[ZEROS][ZEROS];
  40.  
  41. void solve() {
  42.     forn(k, cnt) {
  43.         forn(i, cnt) {
  44.             forn(j, cnt) {
  45.                 d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  46.             }
  47.         }
  48.     }
  49.     ll mx = -1;
  50.     vector <pair <string, string> > ans;
  51.     forn(i, cnt) {
  52.         forn(j, cnt)
  53.             if (d[i][j] > mx && d[i][j] != INF) {
  54.                 mx = d[i][j];
  55.             }
  56.     }
  57.     forn(i, cnt) {
  58.         for(int j = 0; j < i; ++j) {
  59.             if (d[i][j] == mx) {
  60.                 string s1 = M1[i], s2 = M1[j];
  61.                 if (s1 < s2)
  62.                     ans.pub(mp(s1, s2));
  63.                 else
  64.                     ans.pub(mp(s2, s1));
  65.             }
  66.         }
  67.     }
  68.     sort(ans.begin(), ans.end());
  69.     forn(i, (int)ans.size())
  70.         cout << ans[i].first << " " << ans[i].second << endl;
  71. }
  72.  
  73. int main() {
  74. #ifdef  _DEBUG
  75.     freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
  76. #endif
  77.     //ios_base::sync_with_stdio(0);
  78.     //cin.tie(0);
  79.  
  80.     int n;
  81.     cin >> n;
  82.     forn(i, ZEROS) {
  83.         forn(j, ZEROS) {
  84.             d[i][j] = INF;
  85.             if (i == j)
  86.                 d[i][j] = 0;
  87.         }
  88.     }
  89.     forn(i, n) {
  90.         string s1, s2;
  91.         int x;
  92.         cin >> s1 >> s2 >> x;
  93.         if (!M2.count(s1)) {
  94.             M2[s1] = cnt;
  95.             M1[cnt] = s1;
  96.             cnt++;
  97.         }
  98.         if (!M2.count(s2)) {
  99.             M2[s2] = cnt;
  100.             M1[cnt] = s2;
  101.             cnt++;
  102.         }
  103.         d[M2[s1]][M2[s2]] = x;
  104.         d[M2[s2]][M2[s1]] = x;
  105.     }
  106.     solve();
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement