let's start Code

F1. Tree Cutting (Easy Version

F1. Tree Cutting (Easy Version)

Topic: DFS

Concept: প্রতিটা প্যারেন্ট এর চাইল্ড কোন কোন কালার আছে তার হিসাব রাখবো, যেমন প্রথম উদাহরনে -
১ নং নোডের চাইল্ড এর সংখ্যা হবে ১টা লাল, ২টা নীল , ১টা নরমাল।
২ নং নোডের চাইল্ড এর সংখ্যা হবে ১টা লাল, ১টা নীল , ২টা নরমাল।
৩ নং এর ১টা নরমাল (নিজের কালার)।
৪ নং নোডের চাইল্ড এর সংখ্যা হবে ১টা লাল ( এইটা বাদ দিয়ে এন্সার পাব)।
৫ নং নোডের চাইল্ড এর সংখ্যা হবে 1টা নীল।

Solution 01:


#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 5;
int visit[maxn];
int a[maxn];
vector<int>graph[maxn];
int red,blue;
int cnt[maxn][3];
void dfs(int s, int p = -1)
{
cnt[s][a[s]]++;
for(auto x: graph[s]){
if(x == p)continue;
dfs(x,s);
for(int i = 0; i < 3; i++){
cnt[s][i] += cnt[x][i];
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
red = 0, blue = 0;
for(int i = 1; i <= n; i++){
cin >> a[i];
if(a[i] == 1)red++;
else if(a[i] == 2)blue++;
}
for(int i = 0; i < n-1; i++){
int u,v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
}
dfs(1);
int ans = 0;
for(int i = 1; i <= n; i++){
if( (cnt[i][1] == red && cnt[i][2] == 0) || (cnt[i][1] == 0 && cnt[i][2] == blue) )ans++;
}
cout << ans << endl;
return 0;
}
Share:

Related Posts:

No comments:

Post a Comment

About

let's start CODE

Popular Posts