Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<math.h>
- #include<algorithm>
- #include<set>
- #include<map>
- #include<utility>
- #include<vector>
- #include<string>
- #include<stack>
- #include<queue>
- #include<iostream>
- #include<assert.h>
- using namespace std;
- const int N = 100005;
- int d[N],vst[N],True,md[N];
- vector<int>e[N];
- void bfs( int u )
- {
- int i,j,k,v;
- True++;
- queue<int>q;
- q.push( u );
- d[u]=0;
- md[u]=max( md[u],d[u] );
- while(!q.empty())
- {
- u=q.front();
- q.pop();
- for( i=0;i<(int)e[u].size();i++ )
- {
- v=e[u][i];
- if(vst[v]==True)continue;
- d[v]=d[u]+1;
- md[v]=max( md[v],d[v] );
- vst[v]=True;
- q.push( v );
- }
- }
- }
- int main()
- {
- freopen("in.txt","r",stdin);
- int t,n,m,u,v,x,y,r,i,j,k;
- cin>>t;
- while(t--)
- {
- cin>>n>>r;
- for(i=0;i<N;i++)e[i].clear();
- for(i=0;i<n;i++)
- {
- scanf("%d%d",&u,&m);
- for(j=0;j<m;j++)
- {
- scanf("%d",&v);
- e[u].push_back(v);
- }
- }
- while(r--)
- {
- scanf("%d",&k);
- memset(md,-1,sizeof(md));
- for( i=0;i<k;i++ )
- {
- scanf("%d",&u);
- bfs( u );
- }
- }
- j=-1;
- for(i=0;i<N;i++)
- {
- if( md[i]!=-1 )
- {
- cout<<i<<" "<<md[i]<<endl;
- if(j==-1 || md[j]>md[i])j=i;
- }
- }
- printf("%d %d\n",md[j],j);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement