Alex_tz307

1837. Isenbaev's Number - Timus

Nov 3rd, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. inline void min_self(int& a, int b) {
  7.     a = min(a, b);
  8. }
  9.  
  10. int main() {
  11.     ios_base::sync_with_stdio(false);
  12.     cin.tie(nullptr);
  13.     cout.tie(nullptr);
  14.     int N;
  15.     cin >> N;
  16.     vector < vector < string > > t(N + 1, vector < string >(3));
  17.     vector < int > v(N + 1, INF);
  18.     map < string , int > sol;
  19.     queue < int > Q;
  20.     for(int i = 1; i <= N; ++i) {
  21.         bool flag = false;
  22.         for(auto& s : t[i]) {
  23.             cin >> s;
  24.             if(s == "Isenbaev") {
  25.                 Q.emplace(i);
  26.                 sol[s] = 0;
  27.                 flag = true;
  28.                 v[i] = 1;
  29.             }
  30.         }
  31.         if(flag)
  32.             for(auto s : t[i])
  33.                 if(s != "Isenbaev")
  34.                     sol[s] = 1;
  35.     }
  36.     vector < vector < int > > G(N + 1);
  37.     for(int i = 1; i < N; ++i)
  38.         for(int j = i + 1; j <= N; ++j) {
  39.             bool ok = false;
  40.             for(auto s1 : t[i])
  41.                 for(auto s2 : t[j])
  42.                     if(s1 == s2)
  43.                         ok = true;
  44.             if(ok) {
  45.                 G[i].emplace_back(j);
  46.                 G[j].emplace_back(i);
  47.             }
  48.         }
  49.     while(!Q.empty()) {
  50.         int node = Q.front();
  51.         Q.pop();
  52.         for(int Next : G[node])
  53.             if(v[Next] > v[node] + 1) {
  54.                 v[Next] = v[node] + 1;
  55.                 Q.emplace(Next);
  56.             }
  57.     }
  58.     for(int i = 1; i <= N; ++i)
  59.         if(v[i] != 1)
  60.             for(auto s : t[i])
  61.                 if(sol[s] == 0)
  62.                     sol[s] = v[i];
  63.                 else
  64.                     min_self(sol[s], v[i]);
  65.     for(auto x : sol) {
  66.         cout << x.first << ' ';
  67.         if(x.second == INF)
  68.             cout << "undefined\n";
  69.         else
  70.             cout << x.second << '\n';
  71.     }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment