Skip to content

Commit 7979512

Browse files
Merge pull request matthewsamuel95#872 from amulyagaur/patch-1
A problem on sack (https://www.hackerrank.com/challenges/coloring-tre…
2 parents 10ef7f0 + 82bfdf6 commit 7979512

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
set<int> *s[100005];
4+
vector< vector<int> > g(100005);
5+
int color[100005];
6+
int size_tree[100005];
7+
int dfs(int u,int par)
8+
{
9+
int mx=-1,mv=-1,v;
10+
for(int i=0;i<g[u].size();i++)
11+
{
12+
v= g[u][i];
13+
if(v==par)
14+
continue;
15+
int sz = dfs(v,u);
16+
if(sz>mx)
17+
{
18+
mx=sz;
19+
mv=v;
20+
}
21+
}
22+
if(mx!=-1)
23+
{
24+
s[u]=s[mv];
25+
}
26+
else
27+
{
28+
s[u] = new set<int>();
29+
}
30+
(*s[u]).insert(color[u]);
31+
32+
33+
for(int i=0;i<g[u].size();i++)
34+
{
35+
v= g[u][i];
36+
if(v==par)
37+
continue;
38+
39+
if(v!= mv && v!= par)
40+
{
41+
for(auto it=(*s[v]).begin();it!= (*s[v]).end();it++)
42+
{
43+
(*s[u]).insert(*it);
44+
}
45+
}
46+
}
47+
return size_tree[u]=(int)(*s[u]).size();
48+
}
49+
50+
int main()
51+
{
52+
int n,m,r;
53+
scanf("%d %d %d",&n,&m,&r);
54+
55+
for(int i=1;i<n;i++)
56+
{
57+
int u,v;
58+
scanf("%d %d",&u,&v);
59+
g[u].push_back(v);
60+
g[v].push_back(u);
61+
}
62+
for(int i=1;i<=n;i++) scanf("%d",&color[i]);
63+
int sz=dfs(r,0);
64+
while(m--)
65+
{
66+
int d;
67+
scanf("%d",&d);
68+
printf("%d\n",size_tree[d]);
69+
}
70+
return 0;
71+
}

0 commit comments

Comments
 (0)