小美的树上染色题解 题目:小美拿到了一棵树,每个节点有一个权值。初始每个节点都是白色。 小美有若干次操作,每次操作可以选择两个相邻的节点,如果它们都是白色且权值的乘积是完全平方数,小美就可以把这两个节点同时染红。小美想知道,自己最多可以染红多少个节点? 思路:由于只在乎相邻节点权值乘积为完全平方数的,所...
小美拿到了一棵树,每个节点有一个权值。初始每个节点都是白色。小美有若干次操作,每次操作可以选择两个相邻的节点,如果它们都是白色且权值的乘积是完全平方数,小美就可以把这两个节点同时染红。小美想知道,自己最多可以染红多少个节点? 输入描述:第一行输入一个正整数n,代表节点的数量。 第二行输入n个正整数ai,...
D 题解 | #小美的树上染色 小美的排列询问 https://ac.nowcoder.com/acm/contest/63585/A from functools import lru_cache from math import sqrt @lru_cache(None) def dfs(u, parent, b): """ param: b: 当前节点是否已经染色 """ res = 0 t = [] # (权值,染色的贡献,不染色的贡献) for...
小美拿到了一棵树,每个节点有一个权值。初始每个节点都是白色。小美有若干次操作,每次操作可以选择两个相邻的节点,如果它们都是白色且权值的乘积是完全平方数,小美就可以把这两个节点同时染红。小美想知道,自己最多可以染红多少个节点? 输入描述:第一行输入一个正整数n,代表节点的数量。 第二行输入n个正整数ai,...
G. **小美的树上染色 Description 小美拿到了一棵树,每个节点有一个权值。初始每个节点都是白色。小美有若干次操作,每次操作可以选择两个相邻的节点,如果它们都是白色且权值的乘积是完全平方数,小美就可以把这两个节点同时染红。小美想知道,自己最多可以染红多少个节点? Input 第一行输入一个正整数n,代表节点的数...
bool isQrt(int n) { int x = sqrt...
小美的树上染色 https://ac.nowcoder.com/acm/contest/63585/DD题 可以当成二分图最大匹配问题来做 这里用的是匈牙利算法 (但是没有dp快 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n,match[N],w[N]; vector<int> v[N]; bool vis[N]; bool check(int x...
题面 核心思想 树形DP dp[1]表示以当前节点为根节点以及所包含的子树 且 当前节点能染色的最大染色数量 dp[0]表示以当前节点为根节点以及所包含的子树 且 当前节点不染色的最大染色数量 dp[0]好算,只用把孩子节点的dp值取max累加就好了 dp[1] 假设当前节点为cur,cur能和孩
D题解 | #小美的树上染色# 经典的树形DP 1、以节点1为根节点建树(任何一个节点为根节点都行); 2、dp[i][0] 表示以节点i为子树根节点时,节点i没有被染色时整个i节点子树可以被染色的最多节点数量;同样 dp[i][1] 表示以节点i为子树根节点时,节点i被染色时整个i节点子树可以被染色的最多节点数量; ...
D题解 | #小美的树上染色# 经典的树形DP 1、以节点1为根节点建树(任何一个节点为根节点都行); 2、dp[i][0] 表示以节点i为子树根节点时,节点i没有被染色时整个i节点子树可以被染色的最多节点数量;同样 dp[i][1] 表示以节点i为子树根节点时,节点i被染色时整个i节点子树可以被染色的最多节点数量; ...