• Source
    1. #include <iostream>
    2. #include <vector>
    3. #include <queue>
    4. using namespace std;
    5. const int N=104;
    6. const int INF=100000000;
    7. int main()
    8. {
    9. int t;
    10. cin>>t;
    11. for(int k=1;k<=t;++k)
    12. {
    13. vector<int> graph(N,0);
    14. vector<bool> mark(N,false);
    15. int n,m;
    16. cin>>n;
    17. for(int i=0;i<n;++i)
    18. {
    19. int a,b;
    20. cin>>a>>b;
    21. graph[a]=b;
    22. }
    23. cin>>n;
    24. for(int i=0;i<n;++i)
    25. {
    26. int a,b;
    27. cin>>a>>b;
    28. graph[a]=b;
    29. }
    30. queue< pair<int,int> > q;
    31. int ans=INF;
    32. q.push(make_pair(1,0));
    33. mark[1]=true;
    34. while(!q.empty())
    35. {
    36. pair<int,int> p=q.front();
    37. if(p.first==100)
    38. {
    39. ans=p.second;
    40. break;
    41. }
    42. q.pop();
    43. for(int i=1;i<=6;++i)
    44. {
    45. int x=p.first+i;
    46. if(x>100)
    47. continue;
    48. if(mark[x]==false)
    49. {
    50. mark[x]=true;
    51. if(graph[x]==0)
    52. q.push(make_pair(x,p.second+1));
    53. else
    54. {
    55. x=graph[x];
    56. mark[x]=true;
    57. q.push(make_pair(x,p.second+1));
    58. }
    59. }
    60. }
    61.  
    62. }
    63. if(ans==INF)
    64. cout<<-1<<endl;
    65. else
    66. cout<<ans<<endl;
    67.  
    68. }
    69. }