fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define pb push_back
  4. #define maxn 100010
  5. #define mmaxn 1000000000
  6. #define pii pair<int,int>
  7. #define pll pair<ll int,ll int>
  8. #define pdd pair<double,double>
  9. #define MOD 1000000007
  10. #define f first
  11. #define s second
  12. using namespace std;
  13. vector<int> nodes[maxn/5];
  14. bool visit[maxn];
  15. map <string,bool > inserted;
  16. vector<string> t[maxn];
  17. vector<pair<pii,int>> qu;
  18. bool compare(const pair<pii,int> &i, const pair<pii,int> &j){
  19. if(i.s!=j.s){
  20. return i.f.s < j.f.s ;
  21. }
  22. else{
  23. if(i.f.f != j.f.f) // level check
  24. return i.f.f > j.f.f;
  25. else
  26. return i.f.s < j.f.s ;
  27. }
  28. }
  29.  
  30. void dfs(int x,int p,int cnt,int compo){
  31. visit[x]=true;
  32. qu.pb({{cnt,x},compo});
  33. for(auto i:nodes[x]){
  34. if(i!=p && !visit[i])
  35. dfs(i,x,cnt+1,compo);
  36. }
  37. }
  38. int main(){
  39. int q,n,m,d,dt,kids;
  40. cin>>q;
  41. while(q--){
  42. cin>>n>>m;
  43. vector<int> base;
  44. for(int i=1;i<=n;i++){
  45. cin>>d;
  46. while(d--){
  47. cin>>dt;
  48. nodes[i].pb(dt);
  49. // nodes[i].pb(dt);
  50. }
  51. }
  52. for(int i=0;i<m;i++){
  53. cin>>dt;
  54. base.pb(dt);
  55. }
  56. // cout<<"boop\n";
  57. int cnt=0;
  58. vector<string> k;
  59. qu.clear();
  60. for(auto i:base){
  61. dfs(i,-1,0,cnt);
  62. cnt++;
  63. }
  64. // sort(k.begin(), k.end());
  65. sort(qu.begin(), qu.end(),compare);
  66. cout<<qu.size()<<"\n";
  67. // vector<string> g;
  68. for(auto i:qu){
  69. // g.insert(g.end(),i.begin(),i.end());
  70. // cout<<i.f.f<<" "<<i.f.s<<" "<<i.s<<"\n";
  71. cout<<i.f.s<<" ";
  72. }
  73. cout<<"\n";
  74. }
  75. }
Success #stdin #stdout 0s 4980KB
stdin
1
8 3
1 8
0
1 7
1 7
1 2
1 2
0
2 3 4
1 5 6
stdout
8
2 5 7 3 4 8 1 6