Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. #define NguyenDangQuan the_author
  2.  
  3. #include <bits/stdc++.h>
  4. #define all(x) x.begin(),x.end()
  5. #define mset(x, i) memset(x,i,sizeof(x))
  6. #define elif else if
  7. #define heap priority_queue
  8. #define fi first
  9. #define se second
  10. #define pb push_back
  11. #define ld long double
  12. #define ll long long
  13. #define ull unsigned long long
  14. #define task "VUONTRE"
  15. using namespace std;
  16.  
  17. int typetest;
  18. template<class T>
  19. void read(T &x){
  20.     register int c;
  21.     T neg = 1;
  22.     x = (T)0;
  23.     while ((c = getchar()) <= 47 || c >= 58)
  24.         if(c == '-') neg = -1;
  25.     for (; (c > 47 && c < 58); c = getchar()){
  26.         x = (x << 3) + (x << 1) + (T)(c - 48);
  27.     }
  28.     x *= neg;
  29. }
  30. inline void fastIOfileinput(){
  31.     ios_base:: sync_with_stdio(0);
  32.     cin.tie(0);
  33.     cout.tie(0);
  34.     freopen(task".INP", "r", stdin);
  35.     freopen(task".OUT", "w", stdout);
  36. //  freopen(task".in", "r", stdin);
  37. //  freopen(task".out", "w", stdout);
  38.     typetest = 0;
  39. }
  40.  
  41. struct quan{
  42.     int id, w;
  43.     quan() {}
  44.     quan(int u, int v){
  45.         id = u;
  46.         w = v;
  47.     }
  48.     bool operator < (const quan& a) const{
  49.         return w > a.w
  50.             ||(w == a.w && id > a.id);
  51.     }
  52. };
  53.  
  54. const int N = 1e5 + 2;
  55. vector<quan> ke[N];
  56. set<int> tre;
  57. int n;
  58. int minn = 1e8, pos;
  59.  
  60. void Enter(){
  61.     cin >> n;
  62.     while(n--){
  63.         char a, b;
  64.         int v;
  65.         cin >> a >> b >> v;
  66.         if(a >= 'A' && a <= 'Z'){
  67.             tre.insert(a - 'A' + 1);
  68.             a = a - 'A' + 'a';
  69.         }
  70.         if(b >= 'A' && b <= 'Z'){
  71.             tre.insert(b - 'A' + 1);
  72.             b = b - 'A' + 'a';
  73.         }
  74.         ke[a - 'a' + 1].pb(quan(b - 'a' + 1, v));
  75.         ke[b - 'a' + 1].pb(quan(a - 'a' + 1, v));
  76.     }
  77. }
  78.  
  79. void dijkstra(int x){
  80.     heap<quan, vector<quan> > s;
  81.     bool free[50];
  82.     mset(free, 0);
  83.     s.push(quan(x, 0));
  84.     free[x] = 1;
  85.     while(s.size()){
  86.         quan c = s.top();
  87.         s.pop();
  88.         if(c.id == 'z' - 'a' + 1){
  89.             if(minn > c.w){
  90.                 minn = c.w;
  91.                 pos = x;
  92.             }
  93.             return;
  94.         }
  95.         for(int i = 0; i < ke[c.id].size(); ++i){
  96.             if(!free[ke[c.id][i].id]){
  97.                 free[ke[c.id][i].id] = 1;
  98.                 s.push(quan(ke[c.id][i].id, c.w + ke[c.id][i].w));
  99.             }
  100.         }
  101.     }
  102. }
  103.  
  104. void solve(){
  105.     for(set<int>::iterator i = tre.begin(); i != tre.end(); ++i){
  106.         dijkstra(*i);
  107.     }
  108.     cout << char(pos + 'A' - 1) << " " << minn;
  109. }
  110.  
  111. signed main(){
  112.     fastIOfileinput();
  113.     if(typetest){
  114.         int t;
  115.         cin >> t;
  116.         while(t--){
  117.             Enter();
  118.             solve();
  119.         }
  120.     }
  121.     else{
  122.         Enter();
  123.         solve();
  124.     }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement