思路:用vector存图(存孩子节点),用dfs遍历,用map存每种颜色的数目,处理之后看这个节点是否符合条件。这是当时笔者考试的时候写的,算是一种比较取巧的暴力吧,不保证完全正确,但是分析之后时间复杂度应该最多只有O(节点个数*颜色种类数) 大概可以全AC。
闲谈两句:笔者不是oier,只是为了转专业到计算机自学的C++,难的题目做不来,只会一些暴力方法。发现自从2020年之后,填空题变成了两道后,题目的难度直线上升,很多之前没出现过的算法也出来了,对笔者可以说一种顶级折磨了,考场里有些同学因为太难直接提前交卷走人了,捐款300。还好笔者坚持到了最后,运气不错拿了辽宁省的省一,正在准备国赛。
附上代码,代码有注释。
using namespace std;
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<vector>
#define ll long long
const int maxn=2e5+10;
int n;
ll ans=0;
vector<int> son[maxn];
int color[maxn];
void dfs(int x,unordered_map<int,int>&mp)//map当做引用参数传递 ,