Morass

News

Mar 23rd, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include<iostream>
  2. #include<queue>
  3. #include<vector>
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <map>
  7. #define N 2500
  8. using namespace std;
  9. int n;
  10. vector<int>nodes[N];
  11. map<int,bool> visited;
  12. map<int,int>  distances;
  13. map<int,int>  f;
  14. int sum=0,ind=-1;
  15. //BFS algorithme
  16. void BFS(int i){
  17.     int h=0;
  18.     queue<int> que;
  19.     que.push(i);
  20.     visited[i]=true;
  21.     distances[i] = 0;
  22.     while(!que.empty())
  23.     {
  24.         h++;
  25.         i = que.front();
  26.         que.pop();
  27.         int tmp=0;
  28.         for(int j=0;j<nodes[i].size();j++)
  29.         {
  30.             int v=nodes[i][j];
  31.             if(visited[v]==false)
  32.             {
  33.                 tmp++;
  34.                 visited[v]=true;
  35.                 que.push(v);
  36.                 distances[v] = distances[i]+1;
  37.  
  38.             }
  39.         }
  40.  
  41.     }
  42. }
  43. #define aa first
  44. #define bb second
  45. #define DEB printf("DEB!\n");
  46. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  47. int main()
  48. {
  49.     scanf("%d", &n);
  50.     for(int i = 0; i < N; i++)nodes[i].clear();//clear all
  51.     for(int l=0;l<n;l++){
  52.         int a;
  53.         cin>>a;
  54.         while(a--)
  55.         {
  56.             int b;
  57.             cin>>b;
  58.             nodes[l].push_back(b);
  59.             visited[l]= false;
  60.             distances[l] = -1;
  61.         }
  62.     }
  63.     int cas;
  64.     cin>>cas;
  65.     while(cas--){
  66.         int m;
  67.         cin>>m;
  68.         f.clear();//HERE
  69.         visited.clear();
  70.         distances.clear();
  71.         sum=0;ind=-1;
  72.         BFS(m);
  73.         if(nodes[m].empty()){printf("0\n");continue;}//HERE
  74.         for(auto&h:distances)if(h.bb){
  75.             ++f[h.bb];
  76.             if(f[h.bb]>sum)sum=f[h.bb],ind=h.bb;
  77.             if(f[h.bb]==sum&&h.bb<ind)ind=h.bb;
  78.         }
  79.         cout<<sum<<" "<<ind<<endl;
  80. //        if(cas)cout<<endl;
  81.     }
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment