Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair <int, int> pii;
- typedef vector <int> vi;
- typedef vector <pii> vpii;
- #define endl "\n"
- #define dbg(x) cout << "-->> " << #x << " = " << x << endl;
- #define fl(i, a, b) for(int i = a; i < b; i++)
- #define rfl(i, a, b) for(int i = a; i > b; i--)
- #define fll(i, a, b) for(ll i = a; i < b; i++)
- #define rfll(i, a, b) for(ll i = a; i > b; i--)
- #define pop(q) q.front(); q.pop();
- #define pb push_back
- #define mp make_pair
- #define ff first
- #define ss second
- #define all(v) v.begin(), v.end()
- #define maxv(a, b) *max_element(a, b)
- #define minv(a, b) *min_element(a, b)
- #define getv(vp, n) fl(i, 0, n) {int x; cin >> x; vp.pb(x);}
- #define fastaf ios::sync_with_stdio(false), cin.tie(0) , cout.tie(0)
- #define cases() ll t; cin >> t; while (t--)
- const ll mod = 1e9+7;
- const ll MOD = 1e18+7;
- const ll MAX = 1e5 + 1;
- vpii tree[MAX];
- int n, ans[100001], ht[200001];
- bool v[MAX];
- ll dp[MAX];
- void dfs(int node, int weight) {
- dp[node] = weight;
- v[node] = 1;
- for (auto x : tree[node]) if(not v[x.ff]) dfs(x.ff, dp[node] + x.ss);
- }
- void sieve() {
- fl(i, 2, 100001) for(int j = i; j < 100001; j += i) ans[j] += ht[i];
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- cin >> n;
- fl(i, 0, n - 1) {
- int u, v, x;
- cin >> u >> v >> x;
- tree[u].pb(mp(v, x));
- tree[v].pb(mp(u, x));
- }
- dfs(1, 0);
- fl(i, 1, n + 1) {
- dp[i] *= 2;
- ht[dp[i]] ++;
- }
- sieve();
- cases() {
- int m;
- cin >> m;
- cout << ans[m] << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment