惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
博客园_首页
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
B
Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享

某岛

AtCoder Beginner Contest 409 Luogu P5325. 【模板】Min_25 筛 UOJ #188. 【UR #13】Sanrd AtCoder Beginner Contest 371 AtCoder Beginner Contest 369 RPGMaker 2k3 百科 OneShot 的考古 2024“开创拓芯”游戏创享节的相关记录 CJ 回来后的戒断反应 Luogu P10221. [省选联考 2024] 重塑时光 Luogu P5308 [COCI2018-2019#4] Akvizna wqs 二分 歌唱王国 Lean 相关 BZOJ 3153. Sone1 The 2023 ICPC World Finals Luxor 新巴别塔 Sora 的想象与思考 Facebook Hacker Cup 2023 Round 1 AtCoder Beginner Contest 322 LLaMA 2 相关 HuggingFace AI Game Jam ACL 2023 Trans 相关… Luogu P2053. [SCOI2007] 修车 Luogu P1973. [NOI2011] NOI 嘉年华 Luogu P1933. [NOI2010] 旅行路线 Luogu P1954. [NOI2010] 航空管制 Luogu P2048. [NOI2010] 超级钢琴 Luogu P2046. [NOI2010] 海拔
USACO 2018 February Contest, Gold Problem 2. Directory Tr...
2023-06-05 · via 某岛

June 5, 2023

基本就是 Tree Distances II,
转移函数稍微调整下。

#include <lastweapon/io>

using namespace lastweapon;

const int N = int(2e5) + 9;

int n, m, h[N], c[N], l[N]; LL f[N], g[N];
VVI v;

void dfs1(int r, int p = -1) {
    for(int& a : v[r]) if (a != p) {
        dfs1(a, r);
        h[r] += h[a];
        f[r] += f[a] + h[a]*l[a];
    }
    if(!c[r]) h[r]++;
}

void dfs2(int r, int p = -1) {
    for(int& a : v[r]) if (a != p) {
        g[a] = (f[r] - (f[a] + h[a]*l[a])) + g[r] + (m - h[a])*3;
        dfs2(a, r);
    }
}

int main() {


freopen("dirtraverse.in", "r", stdin);
freopen("dirtraverse.out", "w", stdout);


    RD(n);
    v.resize(n);
    int a;
    string s;
    REP(i, n) {
        cin >> s;
        l[i] = s.size();
        RD(c[i]);
        if(c[i]) l[i]++;
        else m++;
        REP(j, c[i]) {
            RD(a), a--;
            v[i].PB(a);
            v[a].PB(i);
        }
    }
    dfs1(0);
    dfs2(0);
    LL ans = INFF;
    REP(i, n) ans = min(ans, f[i]+g[i]);
    cout << ans << endl;
}

Posted by xiaodao
Category: 日常