Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<queue>
- #include<vector>
- #include <string.h>
- #include <stdio.h>
- #include <map>
- #define N 2500
- using namespace std;
- int n;
- vector<int>nodes[N];
- map<int,bool> visited;
- map<int,int> distances;
- map<int,int> f;
- int sum=0,ind=-1;
- //BFS algorithme
- void BFS(int i){
- int h=0;
- queue<int> que;
- que.push(i);
- visited[i]=true;
- distances[i] = 0;
- while(!que.empty())
- {
- h++;
- i = que.front();
- que.pop();
- int tmp=0;
- for(int j=0;j<nodes[i].size();j++)
- {
- int v=nodes[i][j];
- if(visited[v]==false)
- {
- tmp++;
- visited[v]=true;
- que.push(v);
- distances[v] = distances[i]+1;
- }
- }
- }
- }
- #define aa first
- #define bb second
- #define DEB printf("DEB!\n");
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- int main()
- {
- scanf("%d", &n);
- for(int i = 0; i < N; i++)nodes[i].clear();//clear all
- for(int l=0;l<n;l++){
- int a;
- cin>>a;
- while(a--)
- {
- int b;
- cin>>b;
- nodes[l].push_back(b);
- visited[l]= false;
- distances[l] = -1;
- }
- }
- int cas;
- cin>>cas;
- while(cas--){
- int m;
- cin>>m;
- f.clear();//HERE
- visited.clear();
- distances.clear();
- sum=0;ind=-1;
- BFS(m);
- if(nodes[m].empty()){printf("0\n");continue;}//HERE
- for(auto&h:distances)if(h.bb){
- ++f[h.bb];
- if(f[h.bb]>sum)sum=f[h.bb],ind=h.bb;
- if(f[h.bb]==sum&&h.bb<ind)ind=h.bb;
- }
- cout<<sum<<" "<<ind<<endl;
- // if(cas)cout<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment