hellocoder

SJ1 - prototype_96

Apr 15th, 2019
583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAX 100009
  4.  
  5. vector<int> tree[MAX];
  6. long long int values[MAX], rems[MAX];
  7. long long int gcds[MAX]; // stores gcd of all nodes in the path from root to node i
  8. int visited[MAX];
  9.  
  10. void solve(int x, int parent) {
  11.     visited[x] = 1;
  12.     gcds[x] = __gcd(gcds[parent], values[x]);
  13.     for(int i = 0; i < tree[x].size(); i++) {
  14.         if (!visited[tree[x][i]]) {
  15.             solve(tree[x][i], x);
  16.         }
  17.     }
  18. }
  19. int main()
  20. {
  21.     int t;
  22.     cin >> t;
  23.     while(t--) {
  24.         int n;
  25.         cin >> n;
  26.  
  27.         for(int i = 0; i < MAX; i++) tree[i].clear();
  28.         int x, y;
  29.         for(int i = 1; i < n; i++) {
  30.             cin >> x >> y;
  31.             tree[x].push_back(y);
  32.         }
  33.  
  34.         for(int i = 1; i <= n; i++) {
  35.             cin >> values[i];
  36.         }
  37.         for(int i = 1; i <= n; i++) {
  38.             cin >> rems[i];
  39.         }
  40.  
  41.         memset(gcds, 0, sizeof(gcds));
  42.         memset(visited, 0, sizeof(visited));
  43.         gcds[1] = values[1];
  44.         solve(1, 1);
  45.  
  46.         for(int i = 2; i <= n; i++) {
  47.             if (!tree[i].size()) {
  48.                 cout << rems[i] - __gcd(rems[i], gcds[i]) << " ";
  49.             }
  50.         }
  51.         cout << endl;
  52.     }
  53. }
  54.  
  55. /*
  56.  
  57. 7
  58. 7
  59. 1 2
  60. 1 5
  61. 2 3
  62. 2 4
  63. 5 6
  64. 6 7
  65. 2 7 8 6 3 6 4
  66. 2 4 5 10 18 20 15
  67. 2
  68. 1 2
  69. 10 20
  70. 10 30
  71. 2
  72. 1 2
  73. 10 20
  74. 10 15
  75. 4
  76. 1 2
  77. 2 3
  78. 3 4
  79. 2 4 6 8
  80. 1 3 6 9
  81. 3
  82. 1 2
  83. 2 3
  84. 2 4 6
  85. 1 3 9
  86. 2
  87. 1 2
  88. 4 8
  89. 1 9
  90. 2
  91. 1 2
  92. 8 2
  93. 1 9
  94.  
  95.  
  96. //4 9 14
  97. //20
  98. //10
  99. //8
  100. //8
  101. //8
  102. */
Add Comment
Please, Sign In to add comment