online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include<iostream> #include<vector> #include<unordered_set> #include<utility> #include<cmath> using namespace std; typedef long long int ll; ll root(ll a,ll *arr) { while(arr[a]>0) a = arr[a]; return a; } void union1(ll r1,ll r2,ll *arr) { if(arr[r1]<arr[r2]) { arr[r1]+=arr[r2]; arr[r2] = r1; } else { arr[r2]+=arr[r1]; arr[r1] = r2; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll n,q,i; cin>>n>>q; vector<vector<pair<ll,ll> > > vik(100001); ll w,u,v; for(i=1;i<n;i++) { cin>>u>>v>>w; ll sq = sqrt(w); for(ll j = 1;j<=sq;j++) { if(w%j==0) { if(w/j==j) vik[j].push_back({u,v}); else { vik[j].push_back({u,v}); vik[w/j].push_back({u,v}); } } } } ll d; ll arr[n+1]; for(i=1;i<=n;i++) arr[i] = -1; for(i=1;i<=q;i++) { cin>>d; ll j; unordered_set<ll> s; unordered_set<ll>::iterator it; for(j=0;j<vik[d].size();j++) { s.insert(vik[d][j].first); s.insert(vik[d][j].second); ll r1 = root(vik[d][j].first,arr),r2 = root(vik[d][j].second,arr); union1(r1,r2,arr); } ll ans = 0; while(s.size()>0) { it = s.begin(); if(arr[*it]<-1) ans = ans + arr[*it]*(arr[*it]+1)/2; arr[*it] = -1; s.erase(it); } cout<<ans<<"\n"; } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue