2024蓝桥A组D题

问题描述

在这里插入图片描述


格式输入

输入的第一行包含两个正整数n,m,用一个空格分隔。
第二行包含n个正整数c1,c2,··· ,cn,相邻整数之间使用一个空格分隔,
其中ci表示第一棵树结点i上的权值。
第三行包含m个正整数d1,d2,··· ,dm,相邻整数之间使用一个空格分隔,
其中di表示第二棵树结点i上的权值。
接下来n−1行,每行包含两个正整数ui,vi表示第一棵树中包含一条ui和
vi之间的边。
接下来m−1行,每行包含两个正整数pi,qi表示第二棵树中包含一条pi
和qi之间的边。


格式输出

输出一行包含一个整数表示答案。


样例输入

5 4
10 20 30 40 50
10 40 20 30
1 2
1 3
2 4
3 5
1 2
1 3
3 4


样例输出

2


评测用例规模与约定

对于20%的评测用例,1≤n,m≤500;
对于所有评测用例,1≤n,m≤2×10^5,1≤ci,di ≤10^8,1≤ui,vi ≤n,
1≤pi,qi≤m,对于任意结点,其儿子结点的权重互不相同


解析

dfs遍历树的同时,用map来记录在n树中出现过的节点和权值,同时看m树是否有相同的对应,有就dfs下去,取得最大值再加根节点本身1个。


参考程序

#include<bits/stdc++.h>
using namespace std;
const int N=200020;
int c[N],d[N];
vector<int>e[N],f[N];
int dp[N];
void dfs(int x,int y,int p,int q)
{
    map<int,int>mp;
    for(int i=0;i<e[x].size();i++)
    {
        int nx=e[x][i];
        if(nx==p)continue;
        mp[c[nx]]=nx;
    }
    int mx=0;
    for(int i=0;i<f[y].size();i++)
    {
        int ny=f[y][i];
        if(ny==q)continue;
        if(mp.count(d[ny]))
        {
            dfs(mp[d[ny]],ny,x,y);
            mx=max(mx,dp[ny]);
        }
    }
    dp[y]=mx+1;
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>c[i];
    for(int i=1;i<=m;i++)cin>>d[i];
    for(int i=1;i<n;i++)
    {
        int u,v;cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    for(int i=1;i<m;i++)
    {
        int p,q;cin>>p>>q;
        f[p].push_back(q);
        f[q].push_back(p);
    }
    if(c[1]!=d[1])
    {cout<<0;return 0;}
    dfs(1,1,0,0);
    cout<<dp[1];
    return 0;
}

难度等级

⭐️⭐️⭐️⭐️⭐️(1~10星)

以个人刷题整理为目的,如若侵权,请联系删除~

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023蓝桥Python B是一个Python编程竞赛别,属于蓝桥杯全国软件和信息技术专业人才大赛。蓝桥杯是中国最有影响力的IT竞赛之一,旨在发现和培养软件和信息技术领域的优秀人才。2023年将举办蓝桥杯竞赛中的Python B,意味着这个别将使用Python编程语言进行竞赛。 Python作为一种简单易学的编程语言,拥有较强的可读性和灵活性。它在数据分析、人工智能、Web开发等领域得到广泛应用。Python B的参赛选手有机会展示自己在Python编程方面的技术实力和创造力。 对于2023蓝桥Python B的参赛选手来说,要想在竞赛中取得好成绩,首先需要扎实的Python编程基础。熟悉Python的基本语法、掌握常用的库和模块,是竞赛成功的基石。 其次,参赛选手还需要具备良好的逻辑思维和问解决能力。竞赛中可能遇到各种难,需要分析问、设计算法,并用Python代码实现解决方案。 此外,团队合作也是成功的关键。选手需要与队友密切合作,共同解决问、讨论和优化代码。团队的相互支持和协作能够提高整个团队的竞赛水平和效率。 总的来说,2023蓝桥Python B是一个为期一年的Python编程竞赛,提供了一个展示个人实力和创意的舞台。参赛选手需要具备扎实的编程基础、良好的逻辑思维和问解决能力,并与队友紧密合作,共同实现竞赛目标。参与这个竞赛可以提高个人的编程水平、锻炼团队合作能力,并有机会获得诸如荣誉证书、奖金等奖励。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值