首页 > 其他分享 >CF321C Ciel the Commander 题解 点分治

CF321C Ciel the Commander 题解 点分治

时间:2023-06-25 20:11:54浏览次数:50  
标签:wc get int 题解 sum Commander maxn ms CF321C

题目链接:http://codeforces.com/problemset/problem/321/C

解题思路:

点分治模板题。

每次找到重心给他分配一个字符,分治往下走的时候分配的字符ASCII码 \(+1\) 即可。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

vector<int> g[maxn];
int n;
bool vis[maxn];
char id[maxn];

int get_size(int u, int p) {
    if (vis[u]) return 0;
    int sum = 1;
    for (auto v : g[u])
        if (v != p)
            sum += get_size(v, u);
    return sum;
}

int get_wc(int u, int p, int tot, int &wc) {
    if (vis[u]) return 0;
    int sum = 1, ms = 0;
    for (auto v : g[u]) {
        if (v == p) continue;
        int tmp = get_wc(v, u, tot, wc);
        ms = max(ms, tmp);
        sum += tmp;
    }
    ms = max(ms, tot - sum);
    if (ms <= tot / 2) wc = u;
    return sum;
}

void dfs(int u, char c) {
    if (vis[u]) return;
    get_wc(u, -1, get_size(u, -1), u);
    vis[u] = true;
    id[u] = c;
    for (auto v : g[u])
        dfs(v, c+1);
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i < n; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1, 'A');
    for (int i = 1; i <= n; i++)
        printf("%c ", id[i]);
    return 0;
}

标签:wc,get,int,题解,sum,Commander,maxn,ms,CF321C
From: https://www.cnblogs.com/quanjun/p/17503836.html

相关文章

  • 洛谷P4178 Tree 题解 树上点分治
    题目链接:https://www.luogu.com.cn/problem/P4178解题思路:点分治模板题。设当前重心为\(u\),一共有三种不同类型的路径:路径的一个端点恰好是重心\(u\);路径的两个端点在\(u\)的不同子树中;路径的两个端点在\(u\)的同一个子树中。找到重心\(u\)之后,前两类路径分开求......
  • 基于uni-app+vue3渲染markdown格式|uniapp软键盘顶起问题解决方案
    前些时候有给大家分享一篇uni-app+vite4+uview-plus搭建跨端项目。今天主要分享下在uniapp中渲染markdown语法及uniapp中软键盘弹起,页面tabbar或顶部自定义navbar导航栏被撑起挤压的问题。如上图:支持h5+小程序+App端markdown解析渲染。上面则是演示了在App端+小程序端键盘弹......
  • LOJ#6077. 「2017 山东一轮集训 Day7」逆序对题解
    考虑朴素dp,令\(f_{i,j}\)为\(1\simi\)排列有\(j\)个逆序对的排列数。有转移方程:\[f_{i,j}=\sum_{k=0}^{i-1}f_{i-1,j-k}\]特殊地,我们定义\(j<0\)的\(f_{i,j}\)为\(0\)。定义\(\displaystyleF_i(x)=\sum_{j=0}^{\infty}f_{i,j}x^j\),有\(\displaystyleF_{i}(x)=......
  • AGC021E Ball Eat Chameleons 题解
    本文网址:https://www.cnblogs.com/zsc985246/p/17501300.html,转载请注明出处。传送门AGC021EBallEatChameleons题目翻译有\(n\)只变色龙,一开始都是蓝色。你会依次扔出\(k\)个球,每次扔出都要指定一只变色龙吃掉这个球。扔出的球可以是红色或蓝色。变色龙从蓝色变成红......
  • 【Debian】更换阿里源出现的Certificate问题解决方法
    系统版本Debian11源配置debhttps://mirrors.aliyun.com/debian/bullseyemainnon-freecontribdeb-srchttps://mirrors.aliyun.com/debian/bullseyemainnon-freecontribdebhttps://mirrors.aliyun.com/debian-security/bullseye-securitymaindeb-src......
  • [ABC259F] Select Edges 题解
    Solution考虑树形\(dp\)。我们可以注意到节点\(i\)的相邻的边中被选中的不超过\(d_i\)条,显然我们可以定义状态\(dp_{u,k}\)表示节点\(u\)连接子节点的边有\(k\)条的最大值。但是此处没有给定\(d_i\)的范围,所以对于一个节点最多可能会有\(n-1\)个点,所以时间复杂......
  • 牛客题解-mixup2混乱的奶牛(状压dp)
    题解-mixup2混乱的奶牛[原题连接](1026-mixup2混乱的奶牛_2021秋季算法入门班第八章习题:动态规划2(nowcoder.com))题目描述混乱的奶牛[DonPiele,2007]FarmerJohn的N(4<=N<=16)头奶牛中的每一头都有一个唯一的编号S_i(1<=S_i<=25,000).奶牛为她们的编号感到骄傲......
  • P4920 题解
    前言题目传送门!更好的阅读体验?没看题解把未来程序切了,很高兴,来写篇题解!这篇题解在博客园里观看,效果明显更佳,请前往博客园。Program1简单的。显然答案为\((a\timesb)\bmodc\),转成__int128后暴力乘即可。代码有手就行。Program2简单的。给定\(n\)与\(mod\),有递推......
  • 春秋杯春季联赛&&ciscn2023华北赛区部分题解
    前言复现几个比赛时没做出来的题1.[CISCN2023华北赛区]ez_ruby查文档可知ruby内置的open函数,如果第一个字符是管道符|,后面就可以接命令。这可能是考察涉猎的知识范围广不广吧。直接nc反弹shell即可2.[CISCN2023华北赛区]ExifTool看着天枢佬复现的,说是非预期,不知道预......
  • 【题解】AtCoder-ABC306G Return to 1
    这也太强了!容易想到的是用若干环拼出这个\(10^{10^{100}}\),也就是这些环的\(\gcd\mid10\)。之后就不会了。先正图反图两次DFS,只留下\(1\)所在强连通分量里的边,对正图跑DFS生成树,定义其深度从\(0\)开始,然后有一个结论是:对于任何正整数\(a\),图中存在一个包含\(1\)......