invictus_123

Untitled

Sep 20th, 2019
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair <int, int> pii;
  5. typedef vector <int> vi;
  6. typedef vector <pii> vpii;
  7. #define endl "\n"
  8. #define dbg(x) cout << "-->> " << #x << " = " << x << endl;
  9. #define fl(i, a, b) for(int i = a; i < b; i++)
  10. #define rfl(i, a, b) for(int i = a; i > b; i--)
  11. #define fll(i, a, b) for(ll i = a; i < b; i++)
  12. #define rfll(i, a, b) for(ll i = a; i > b; i--)
  13. #define pop(q) q.front(); q.pop();
  14. #define pb push_back
  15. #define mp make_pair
  16. #define ff first
  17. #define ss second
  18. #define all(v) v.begin(), v.end()
  19. #define maxv(a, b) *max_element(a, b)
  20. #define minv(a, b) *min_element(a, b)
  21. #define getv(vp, n) fl(i, 0, n) {int x; cin >> x; vp.pb(x);}
  22. #define fastaf ios::sync_with_stdio(false), cin.tie(0) , cout.tie(0)
  23. #define cases() ll t; cin >> t; while (t--)
  24. const ll mod = 1e9+7;
  25. const ll MOD = 1e18+7;
  26. const ll MAX = 1e5 + 1;
  27. vpii tree[MAX];
  28. int n, ans[100001], ht[200001];
  29. bool v[MAX];
  30. ll dp[MAX];
  31. void dfs(int node, int weight) {
  32.     dp[node] = weight;
  33.     v[node] = 1;
  34.     for (auto x : tree[node]) if(not v[x.ff]) dfs(x.ff, dp[node] + x.ss);
  35. }
  36. void sieve() {
  37.     fl(i, 2, 100001) for(int j = i; j < 100001; j += i) ans[j] += ht[i];
  38. }
  39. int main() {
  40.    
  41.     #ifndef ONLINE_JUDGE
  42.     freopen("input.txt", "r", stdin);
  43.     freopen("output.txt", "w", stdout);
  44.     #endif
  45.    
  46.     cin >> n;
  47.     fl(i, 0, n - 1) {
  48.         int u, v, x;
  49.         cin >> u >> v >> x;
  50.         tree[u].pb(mp(v, x));
  51.         tree[v].pb(mp(u, x));
  52.     }
  53.     dfs(1, 0);
  54.     fl(i, 1, n + 1) {
  55.         dp[i] *= 2;
  56.         ht[dp[i]] ++;
  57.     }
  58.     sieve();
  59.     cases() {
  60.         int m;
  61.         cin >> m;
  62.         cout << ans[m] << endl;  
  63.     }
  64.     return 0;
  65. }
Add Comment
Please, Sign In to add comment