首页 > 其他分享 >【每日一题】Problem 120F. Spiders

【每日一题】Problem 120F. Spiders

时间:2023-06-13 23:36:27浏览次数:70  
标签:std cur int param depth vec Problem 120F Spiders

原题

解决思路

通过给定的数据,将其构建称树,取其中最大的深度进行拼接,最后得到最终结果

如何获取最大的深度

以每个节点作为 root 构建树,然后取其中最大的深度

#include <bits/stdc++.h>

/**
 * @param vec
 * @param cur   当前节点
 * @param last  上一个访问的节点
 * @param level 当前节点所在层级
 * @param depth 以最初的 cur 节点作为 root 节点的树的深度
 */
void dfs(std::vector<std::vector<int>> &vec, int cur, int last, int level, int &depth) {
    for (int i = 0; i < vec[cur].size(); ++i) {
        if (vec[cur][i] == last) continue;
        dfs(vec, vec[cur][i], cur, level + 1, depth);
    }
    depth = std::max(depth, level);
}

int main() {
    // 使用 freopen 更改输入输出流
    std::freopen("input.txt", "r", stdin);
    std::freopen("output.txt", "w", stdout);
    int n; std::cin >> n;
    int res = 0;
    for (int i = 0; i < n; ++i) {
        int p; std::cin >> p;
        std::vector<std::vector<int>> vec(p+1, std::vector<int>());
        int x, y;
        for (int j = 0; j < p - 1; ++j) {
            std::cin >> x >> y;
            vec[x].push_back(y);
            vec[y].push_back(x);
        }
        // 以每个 cur 作为 root,计算出所有可能的树中最大的深度
        int depth = 0;
        for (int cur = 1; cur <= p; ++cur)
            dfs(vec, cur, 0, 1, depth);
        res += depth;
    }

    res -= n; // equals res = res - (n-1) - 1
    std::cout << res << std::endl;
    return 0;
}

标签:std,cur,int,param,depth,vec,Problem,120F,Spiders
From: https://www.cnblogs.com/HelloEricy/p/17478975.html

相关文章

  • RTFM、STFW 和 X-Y Problem
    如何提问艾瑞克。史蒂文.雷蒙德(EricStevenRaymond)的提问的智慧。这是一篇长文,看完需要十几分钟的时间。如果之前没有认真看过并且思考过,这十几分钟会改变你的职业生涯。这文章可能会出现一些让人不适的词语或者过时的例子,但我认为这不会影响它要表达的内容,而你需要好好琢磨作......
  • 解决 This is probably not a problem with npm. There is likely additional logging
    在执行npmrunserve运行项目的时候报错:dengzemiaodeMacBook-Pro:lianshan_vuedengzemiao$npmrunserve......npmERR!codeELIFECYCLEnpmERR!errno1npmERR!lianshan@2.0.0serve:`vue-cli-serviceserve`npmERR!Exitstatus1npmERR!npmERR!Failedatthelia......
  • Not Another Linear Algebra Problem 题解
    题意:自己看。首先我们知道我们唯一能找到的题解在hos_lyric的代码里。把它放在这里:(由bikuhiku提供)\[\begin{aligned}&U\subseteq\mathbb{F}_p^n,\text{subspace}\\&a(U):=\#\{p\in\text{Aut}(\mathbb{F}_p^n)|\text{Ker}(p-\text{id})=U\}\\&b(U):=......
  • 【每日一题】Problem 44E. Anfisa the Monkey
    原题解决思路由题意可得\(ak\lesize\lebk\),因此当条件不符合该要求时即可退出因为\(size\lebk\),因此,我们可以假设每行都是\(b\)长度来满足条件二,因此第\(i\)行的长度为\(len=size-(k-i)b\),然后对\(len\)取与\(a\)中的较大者来满足条件一注意,如果后续行每......
  • 【每日一题】Problem 363B. Fence
    原题解决思路求k个木板的最小高度和,因为所有木板的高度和不超过1e9,因此计算出到当前木板j的总高度-前j-k模板的总高度并求得最小数即可#include<bits/stdc++.h>intmain(){intn,k;std::cin>>n>>k;std::vector<int>vec(n+1,0);for(in......
  • 【每日一题】Problem 331C1. The Great Julya Calendar
    原题解决思路寻求减到0所需的最小次数,即\(Num(n)\RightarrowNum(n-x)+1\)当存在一个x使得(n-x)%10=0时,那么(n-x)到下一次个位为0时至少需要两次,即该过程至少需要3次如果存在一个x'>x,那么上述过程可以简化到至少需要2次一般情况下,当n中的前面一段(百位......
  • 【每日一题】Problem 327A - Flipping Game
    原题解决思路计算数字"1"的最大数目,可以转换成计算数组最大和,即求\(maxSum(oldArraySum-(1\rightarrow0)+(0\rightarrow1))\RightarrowoldArraySum+maxSum(flipSum)\)误区注意:题目要求必须执行一次,因此起始值不是0而是-1#include<bits/stdc++.h>intm......
  • yum源使用报错-RockyLInux8.7-Modular dependency problem:
    报错信息如下:Kubernetes11kB/s|173kB00:15Modulardependencyproblem:Problem:conflic......
  • Windows证书管理器 && SSL certification && WSL-Docker: curl: (60) SSL certificat
    深入浅出certmgr——Windows证书管理器https://www.fke6.com/html/91605.html计算机安全是当前社会的一个重要议题,证书是一种重要的安全机制,负责证明数据、软件或者人的身份和信誉。certmgr(即“证书管理器”)是Windows中专门用于证书管理的工具。本文将从多个方面对certmgr进行深......
  • 【每日一题】Problem 313B - Ilya and Queries
    原题解决思路使用后缀和计算到i处共有多少对\(s_i=s_{i+1}\),计算时相减以下就可以#include<bits/stdc++.h>intmain(){std::strings;intm;std::cin>>s>>m;std::vector<std::vector<int>>vec(m,std::vector<int>(2,0));......