Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 0x3f3f3f3f
- using namespace std;
- inline void min_self(int& a, int b) {
- a = min(a, b);
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int N;
- cin >> N;
- vector < vector < string > > t(N + 1, vector < string >(3));
- vector < int > v(N + 1, INF);
- map < string , int > sol;
- queue < int > Q;
- for(int i = 1; i <= N; ++i) {
- bool flag = false;
- for(auto& s : t[i]) {
- cin >> s;
- if(s == "Isenbaev") {
- Q.emplace(i);
- sol[s] = 0;
- flag = true;
- v[i] = 1;
- }
- }
- if(flag)
- for(auto s : t[i])
- if(s != "Isenbaev")
- sol[s] = 1;
- }
- vector < vector < int > > G(N + 1);
- for(int i = 1; i < N; ++i)
- for(int j = i + 1; j <= N; ++j) {
- bool ok = false;
- for(auto s1 : t[i])
- for(auto s2 : t[j])
- if(s1 == s2)
- ok = true;
- if(ok) {
- G[i].emplace_back(j);
- G[j].emplace_back(i);
- }
- }
- while(!Q.empty()) {
- int node = Q.front();
- Q.pop();
- for(int Next : G[node])
- if(v[Next] > v[node] + 1) {
- v[Next] = v[node] + 1;
- Q.emplace(Next);
- }
- }
- for(int i = 1; i <= N; ++i)
- if(v[i] != 1)
- for(auto s : t[i])
- if(sol[s] == 0)
- sol[s] = v[i];
- else
- min_self(sol[s], v[i]);
- for(auto x : sol) {
- cout << x.first << ' ';
- if(x.second == INF)
- cout << "undefined\n";
- else
- cout << x.second << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment