Advertisement
Guest User

ad

a guest
May 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define inf (1 << 29)
  3. using namespace std;
  4.  
  5. vector<vector<int> > grafo(80000);
  6.  
  7. vector<int> BFS(int &nodos, int inicio)
  8. {
  9.     vector<int> distancias(grafo[inicio].size(), inf);
  10.     queue<int> colita;
  11.  
  12.     colita.push(inicio);
  13.     distancias[inicio]=0;
  14.  
  15.     while(colita.size())
  16.     {
  17.         int nodo=colita.front();
  18.         colita.pop();
  19.         for(int i=0; i<grafo[nodo].size(); i++)
  20.         {
  21.             int vecino=grafo[nodo][i];
  22.             if(distancias[nodo]+1<distancias[vecino])
  23.                 distancias[vecino]=distancias[nodo]+1;
  24.         }
  25.     }
  26.  
  27.     return distancias;
  28. }
  29.  
  30. int main()
  31. {
  32.     int pares;
  33.     cin >> pares;
  34.  
  35.     string pais;
  36.     map<string, int> id;
  37.     vector<string> nombres(80000);
  38.  
  39.     for(int i=0; i<pares; i++)
  40.     {
  41.         int a, b;
  42.  
  43.         cin >> pais;
  44.         if(id[pais]==0)
  45.             id[pais]=id.size();
  46.  
  47.         a=id[pais];
  48.         nombres[i+1]=pais;
  49.  
  50.         cin >> pais;
  51.         if(id[pais]==0)
  52.             id[pais]=id.size();
  53.  
  54.         b=id[pais];
  55.         nombres[i+1]=pais;
  56.  
  57.         grafo[a].push_back(b);
  58.         grafo[b].push_back(a);
  59.     }
  60.  
  61.     int nodos=id.size()+1;
  62.     map<string, int>::iterator it=id.begin();
  63.     grafo.resize(nodos);
  64.     nombres.resize(nodos);
  65.     sort(nombres.begin(), nombres.end());
  66.  
  67.     for(int i=1; i<nodos; i++)
  68.     {
  69.         cout << it->first << " " << grafo[it->second].size() << endl;
  70.         it++;
  71.     }
  72.  
  73.     for(int i=1; i<nodos; i++)
  74.     {
  75.         vector<int> limitrofes=BFS(nodos, i);
  76.         for(int j=0; j<grafo[i].size(); j++)
  77.         {
  78.             if(limitrofes[j]>100000)
  79.                 cout << nombres[i] << " " << nombres[j] << endl;
  80.         }
  81.     }
  82.  
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement