Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MV 200001
- #define eb emplace_back
- using namespace std;
- int memo[MV], ar[MV];
- vector<int> G[MV];
- int dfs_visit(int s, int p, int k)
- {
- if(p != -1)
- ar[s] = ((ar[s]%k) + (ar[p]%k))%k;
- int ans = memo[ar[s]];
- memo[ar[s]]++;
- for(const auto &u : G[s])
- {
- if(u != p)
- ans += dfs_visit(u, s, k);
- }
- memo[ar[s]]--;
- return ans;
- }
- int main()
- {
- int n,k;
- cin>>n>>k;
- for(int i=0;i<n-1;i++)
- {
- int s,d;
- cin>>s>>d;
- G[s].eb(d);
- G[d].eb(s);
- }
- memo[0] = 1;
- for(int i=1;i<=n;i++)
- {
- cin>>ar[i];
- ar[i] %= k;
- }
- int ans = dfs_visit(1, -1, k);
- cout<<ans<<"\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment