首页 > 其他分享 >题解:CF1830A Copil Copac Draws Trees

题解:CF1830A Copil Copac Draws Trees

时间:2025-01-03 19:56:19浏览次数:6  
标签:Draws int 题解 back Trees 编号 push id

首先这道题肯定不能暴力枚举,我们要思考其他算法。

我们可以给每一条边编一个号。然后从根开始遍历这棵树,当一条边的编号比他祖先到他祖先的祖先的那条边的编号还要小时,就说明顺序错了,要再等一轮。

这个就简单了,直接 dfs 就行,注意答案要加 \(1\)。

#include <bits/stdc++.h>
using namespace std;
vector<int> to[200005],id[200005];

int dfs(int x,int fa,int pre){ //x当前节点,fa上一个节点(因为是无向图),pre上一条边的编号
    int res=0;
    for(int i=0;i<to[x].size();i++){
        if(to[x][i]!=fa) res=max(res,dfs(to[x][i],x,id[x][i])+(id[x][i]<pre)); //(id[x][i]<pre)是一个布尔表达式,如果为真就加1
    }
    return res;
}
int main(){
    int T; cin>>T;
    while(T--){
        int n; cin>>n;
        for(int i=1;i<=n;i++) to[i].clear(),id[i].clear(); //注意多测清空
        for(int i=1;i<n;i++){
            int x,y;
            cin>>x>>y;
            to[x].push_back(y); to[y].push_back(x);
            id[x].push_back(i); id[y].push_back(i); //给每一条边编号
        }
        cout<<dfs(1,0,0)+1<<'\n';
    }
    return 0;
}

标签:Draws,int,题解,back,Trees,编号,push,id
From: https://www.cnblogs.com/sapo1o/p/18650826

相关文章

  • 深入理解 Java Set 集合:原理、应用与高频面试题解析
    深入理解JavaSet集合:原理、应用与高频面试题解析在Java中,Set是一种重要的集合接口,用于存储不重复的元素。无论是在实际开发中,还是在面试场景中,Set都是一个高频的知识点。本篇文章将详细介绍JavaSet集合的基础知识、常见实现类、应用场景以及面试常考题,最后通过总结帮助......
  • 题解:CF2044D Harder Problem
    CF2044DHarderProblem思路构造一个\(1\simn\)都出现了一次的数列(这样每个数都是众数了),然后只要保证在数组\(a\)里面出现了的数在最前面就好了。AC代码#include<bits/stdc++.h>usingnamespacestd;#defineN200005longlongt,vis[N],cnt,n,a[N];intmain(){ cin......
  • 题解 - 出栈序列(2022.10上海月赛丙组T5)
    题目描述给定一个长度为几的、仅由小写字母组成的字符串,将其按序依次放入栈中。请问在所有可能的出栈序列中,字典序最小的出栈序列是多少?输入格式输入第一行,一个正整数几输入第二行,一个长度为几的字符串输出格式输出所有出栈序列中,字典序最小的出栈序列数据范围对......
  • 题解 - 机会成本(2022.9上海月赛丙组T2)
    题目描述明天有门考试,今晚只能复习一门课,请计算应该复习哪一门课,才能让所有考试的分数总和达到最大,如果选择复习第之门课,则这门课的考试分数为a;,若放弃复习第之门课,则这门考试的分数为6;。输入格式第一行:单个整数表示n第二行到第n+1行:每行两个整数表示a;......
  • 【题解】Luogu P7171 [COCI2020-2021#3] Selotejp
    注:题解中\(\operatorname{lsh}\),\(\operatorname{rsh}\),\(\operatorname{or}\)分别表示按位左移、按位右移、按位或,即c++语言中的<<,>>,|。我也是打上轮廓线DP了。设\(f_{x,y,S}\)表示当前在\((x,y)\)格子,前\(m\)个格子的状态为\(S\)时的最小花费。这里的状态是指......
  • USACO2024DEC题解
    P11450[USACO24DEC]FarmerJohn'sCheeseBlockB//FarmerJohn'sCheeseBlockB#include<stdio.h>#include<iostream>usingnamespacestd;intcnt_xy[1005][1005],cnt_yz[1005][1005],cnt_xz[1005][1005];intmain(){intn,q;......
  • [CF2353D] Refined Product Optimality 题解
    首先让我们输出的是不操作的值。不定序,一看就很贪心。经过分类分类分类可证,\(a,b\)都是升序(降序)的时候是最优的。再看加操作的。相当于要维护这两个升序序列。我们发现,每次操作影响的值很少,最多两个值。在一个连续段中,修改的值相当于和末尾值交换,再加一。唐点:找这个末尾没必要......
  • CF848E Days of Floral Colours 题解
    Problem-848E-Codeforces首先,由于整个图是对称的,所以我们将其沿直径分为两半,在算一半答案时把每一段的贡献平方再相加即可。(因为对面也有一段相同长度的也要计入贡献)现在我们的问题转化为了对于一个长为\(n\)的环,你可以给一个点连出一个线头(即在原图中连向对面的边)将其余......
  • Luogu P9646 SNCPC2019 Paper-cutting 题解 [ 紫 ] [ manacher ] [ 贪心 ] [ 哈希 ] [
    Paper-cutting:思维很好,但代码很构式的manacher题。蒟蒻2025年切的第一道题,是个紫,并且基本独立想出的,特此纪念。判断能否折叠我们先考虑一部分能折叠需要满足什么条件。显然,这一部分需要是一个长度为偶数的回文串。那么横向和纵向会不会影响呢?答案是不会,因为横向折了之后,折......
  • CF601E A Museum Robbery 题解
    题目传送门前置知识线段树与离线询问解法普通的回退背包无法处理本题中的删除操作,考虑线段树分治后转化为只进行添加的背包。具体实现时可以对每个深度开一个背包的转移数组,时间复杂度为\(O(nk\logq+qk)\),可以接受。代码#include<bits/stdc++.h>usingnamespacestd;#......