1806E - Tree Master - CodeForces Solution


brute force data structures dfs and similar hashing sortings trees

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
unordered_map<int,int>p[100005];
vector<int>ep[100005];
int dep[100005];
int n,q;
int a[100005];
int fa[100005];
int s[100005];
void dfs(int k,int sum){
	dep[k]=dep[fa[k]]+1;
	sum+=a[k]*a[k];
	s[k]=sum;
	for(int i=0;i<ep[k].size();i++){
		dfs(ep[k][i],sum);
	}
}
int f(int x,int y){
	if(x>y)swap(x,y);
	if(x==y)return s[x];
	if(dep[x]%3==0){
	
	int op=p[x][y]; 
	if(op)return op;
	return p[x][y]=f(fa[x],fa[y])+a[x]*a[y];
	}
	return f(fa[x],fa[y])+a[x]*a[y];
}
void solve(){
scanf("%lld %lld",&n,&q);
for(int i=1;i<=n;i++){
	scanf("%lld",&a[i]);
}
int t1,t2;
for(int i=2;i<=n;i++){
	scanf("%lld",&fa[i]);
	ep[fa[i]].push_back(i);
}
dfs(1,0);
for(int i=1;i<=q;i++){
	scanf("%lld %lld",&t1,&t2);
	printf("%lld\n",f(t1,t2));
}
}
signed main(){
T=1;
//ios::sync_with_stdio(0);
//cin.tie(0);
//cin>>T;
while(T--){
solve();
 
}
 
 
 
 
return 0;
}


Comments

Submit
0 Comments
More Questions

1519A - Red and Blue Beans
466A - Cheap Travel
659E - New Reform
1385B - Restore the Permutation by Merger
706A - Beru-taxi
686A - Free Ice Cream
1358D - The Best Vacation
1620B - Triangles on a Rectangle
999C - Alphabetic Removals
1634C - OKEA
1368C - Even Picture
1505F - Math
1473A - Replacing Elements
959A - Mahmoud and Ehab and the even-odd game
78B - Easter Eggs
1455B - Jumps
1225C - p-binary
1525D - Armchairs
1257A - Two Rival Students
1415A - Prison Break
1271A - Suits
259B - Little Elephant and Magic Square
1389A - LCM Problem
778A - String Game
1382A - Common Subsequence
1512D - Corrupted Array
667B - Coat of Anticubism
284B - Cows and Poker Game
1666D - Deletive Editing
1433D - Districts Connection