VK Cup 2017 - Round 1

【解题报告】Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 简略的解题报告。 阅读详情

感觉自己代码能力太差了,这场比赛的题都调得很痛苦。。

C. Bear and Tree Jumps

  对于一棵有根树来说,dfs可以得到每个节点到树根的距离。注意到跳跃距离最大为5,我们可以把距离最多分为五类,同样地,dfs出所有节点到根的距离信息。
  我的解法分为两次dfs。第一次dfs可以得到节点1为树根时的距离信息。第二次dfs的目的是“换根”,也就是让每个节点以dfs序作为树根,统计与当前根节点有关的所有pair的总距离。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int maxn = 200010;

vector<int> E[maxn];

ll dis[maxn][5];
int p[maxn];

ll n,k;

ll ans[maxn];

ll res = 0;

void dfs1(int u,int pre){
    dis[u][0] = 1;

    int len = E[u].size();
    for(int i=0;i<len;i++){
        int v = E[u][i];
        if(v==pre)continue;
        p[v] = u;
        dfs1(v,u);

        ans[u] += dis[v][0]-1;
        ans[u] += ans[v];

        for(int i=0;i<k;i++){
            dis[u][i] += dis[v][(i+k-1)%k];
        }
    }
}

void dfs2(int u,int pre){
    int len = E[u].size();
    ll tmp = ans[u];
    if(u!=1)ans[u] += ans[p[u]] + dis[p[u]][0]-1;
    res += ans[u];
    for(int i=0;i<len;i++){
        int v = E[u][i];
        if(v==pre)continue;

        ans[u] -= dis[v][0]-1;
        ans[u] -= ans[v];

        for(int i=0;i<k;i++){
            dis[u][i] -= dis[v][(i+k-1)%k];
        }
        for(int i=0;i<k;i++){
            dis[v][i] += dis[u][(i+k-1)%k];
        }

        dfs2(v,u);

        for(int i=k-1;i>=0;i--){
            dis[v][i] -= dis[u][(i+k-1)%k];
        }
        for(int i=k-1;i>=0;i--){
            dis[u][i] += dis[v][(i+k-1)%k];
        }

        ans[u] += ans[v];
        ans[u] += dis[v][0]-1;
    }

    ans[u] = tmp;
}

int main(){
    cin>>n>>k;

    for(int i=1;i<n;i++){
        int u,v;
        scanf("%d %d",&u,&v);
        E[u].push_back(v);
        E[v].push_back(u);
    }

    dfs1(1,0);
    dfs2(1,0);

    res += n*(n-1);

    cout<<res/2<<endl;

    return 0;
}

D. Bear and Company

  做这题的时候,如果只提示我是dp的话,我也会往区间分割方面想,之前没写过这种类型的dp,确实比较巧妙。因为每个位置的字符都可以往任意地方跑,于是分区间是不管用的。
  容易发现除了VK以外的字符都是等效的,定义状态 dp(i,j,k) 表示组成前 i+j+k 个字符有 i 个’V’,j个’K’和 k 个其他字符需要的最小次数,再加一维表示最后一个字符是否是’V’。然后枚举添加三种类型的字符。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int maxn = 200010;

vector<int> E[maxn];

ll dis[maxn][5];
int p[maxn];

ll n,k;

ll ans[maxn];

ll res = 0;

void dfs1(int u,int pre){
    dis[u][0] = 1;

    int len = E[u].size();
    for(int i=0;i<len;i++){
        int v = E[u][i];
        if(v==pre)continue;
        p[v] = u;
        dfs1(v,u);

        ans[u] += dis[v][0]-1;
        ans[u] += ans[v];

        for(int i=0;i<k;i++){
            dis[u][i] += dis[v][(i+k-1)%k];
        }
    }
}

void dfs2(int u,int pre){
    int len = E[u].size();
    ll tmp = ans[u];
    if(u!=1)ans[u] += ans[p[u]] + dis[p[u]][0]-1;
    res += ans[u];
    for(int i=0;i<len;i++){
        int v = E[u][i];
        if(v==pre)continue;

        ans[u] -= dis[v][0]-1;
        ans[u] -= ans[v];

        for(int i=0;i<k;i++){
            dis[u][i] -= dis[v][(i+k-1)%k];
        }
        for(int i=0;i<k;i++){
            dis[v][i] += dis[u][(i+k-1)%k];
        }

        dfs2(v,u);

        for(int i=k-1;i>=0;i--){
            dis[v][i] -= dis[u][(i+k-1)%k];
        }
        for(int i=k-1;i>=0;i--){
            dis[u][i] += dis[v][(i+k-1)%k];
        }

        ans[u] += ans[v];
        ans[u] += dis[v][0]-1;
    }

    ans[u] = tmp;
}

int main(){
    cin>>n>>k;

    for(int i=1;i<n;i++){
        int u,v;
        scanf("%d %d",&u,&v);
        E[u].push_back(v);
        E[v].push_back(u);
    }

    dfs1(1,0);
    dfs2(1,0);

    res += n*(n-1);

    cout<<res/2<<endl;

    return 0;
}
华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go) 华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】 阅读详情

相关推荐

SDM量化噪声等效到PLL输出的传递函数推导

在历年文章或书本中少见SDM量化噪声等效到PLL输出的传递函数推导。需了解SDM量化噪声的本质,配合欧拉方程简化,并将Z域转化成S域。最终结合断环处等效到PLL输出的传递函数,方可完成。

u010486560的博客 1409

VK Cup 2017 - Round 1 A - Bear and Friendship Condition(并查集维护大小 + dfs 遍历图统计边数)

并查集 dfs

Jacob0824的博客 1106

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

VK Cup 2017 - Round 1 A. Bear and Friendship Condition

A. Bear and Friendship Condition time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Bear Limak examines a social networ...

weixin_30379973的博客 169

复合材料热压罐固化残余应力仿真与优化

复合材料在热压罐固化过程中产生的残余应力是影响构件性能的关键因素,尤其在航空航天和风电叶片等高端制造领域。通过多物理场耦合仿真技术,可以精确预测残余应力分布,优化工艺参数。顺序耦合方法分步求解热分析和结构分析,既保证了计算精度,又控制了成本。Abaqus等有限元工具在此过程中发挥重要作用,通过合理设置边界条件、材料属性和接触关系,能够有效模拟温度场和应力场的相互作用。工程实践中,这种仿真方法已成功应用于无人机机翼、卫星支架等实际项目,显著降低了固化变形和微裂纹风险。

weixin_33146151的博客 216

数学建模美赛O奖论文研读启示录——从模仿开始

数学建模美赛O奖论文哪些地方比较出彩?我们可以从中学到什么东西?可以从哪些地方进行模仿?我总结了一些O奖论文里我认为比较好的地方,跟大家一起学习交流!

小宇的修炼之路 5429

VK Cup 2017 - Round 1 (CDE)

771CBear and Tree Jumps 大意: 给定树,每步能走到距离不超过$k$的任意点,记$f(s,t)$为$s$到$t$的最少步数,求$\sum\limits_{s<t}f(s,t)$ 对于路径$(u,v)$, 假设距离为$d$, 那么贡献为$\lceil\frac{d}{k}\rceil=\frac{d+(-d\text{%}k+k)\text{%}k}{k}...

weixin_30295091的博客 200

客服转人工率直降60%!OpenClaw深度集成NLP引擎,打造企业级对话自动化智能客服系统

本文介绍了一套基于OpenClaw智能体框架和NLP大模型引擎的智能客服系统解决方案。该系统通过深度集成NLP引擎实现精准语义理解,采用分层架构设计支持多渠道接入和业务系统对接,显著提升了客服效率。核心亮点包括:92%的重复问题自动解决率,60%的转人工率下降,40%的人力成本降低,以及从30秒压缩至0.5秒的平均响应时长。文章详细阐述了技术选型、系统架构设计、核心模块实现等关键环节,展示了如何通过智能对话系统破解传统客服业务中的人力资源与服务质量矛盾。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 362

VK Cup 2021 - C. Bottom-Tier Reversals(思维,构造)

C. Bottom-Tier Reversals 思路: 首先想一下什么情况下会无解,因为一共有奇数个数字,而且可交换的前缀串长度也是奇数,所以无论如何变换,起初的数字所在位置的奇偶性一定都不会变,然后讨论如何构造,我们只需要以下5步便可以确定最后2个数字,依次搞定所有数字即可 代码: #include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define closeSync ios::sync_with_stdio(0)

人工智能方向,计算机视觉(https://github.com/chenshunpeng) 446

【AUTOSAR SystemServices】AUTOSAR CP中Watchdog Manager模块技术解析

本文深入解析了AUTOSAR中的Watchdog Manager模块实现。该模块通过多层次监督机制(Alive/Deadline/Logical Supervision)确保系统安全运行,具备动态模式切换和分级故障处理能力。 关键实现包括: 数据结构设计:包含监督实体状态结构体(实时状态维护)、监督配置结构体(支持模式切换)和全局状态信息(系统级监控) 核心流程优化:初始化采用事务性设计,检查点处理通过条件编译优化,主监控循环采用流水线式并行处理 监督机制实现:Alive监督采用滑动窗口算法,Deadlin

1039

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3141

VK CUP2017 ROUND 1

来自FallDream的博客。未经允许,请勿转载,谢谢。 ---------------------------------------------------- 和ditoly组队打vkcup,原来以为是正常div2难度,结果发现.....不说了 AB都被叉了一遍,又掉分 ....... ------------------------- A.给定n个人和m组朋友关系,判断这个图是否满足...

weixin_30757793的博客 147

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2392

Codeforces VK Cup 2017 - Round 1 C 树形dp 双解法

VK Cup 2017 - Round 1 C

weixin_58424264的博客 196

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) E

Description Bear Limak prepares problems for a programming competition. Of course, it would be unprofessional to mention the sponsor name in the statement. Limak takes it seriously and he is g...

219

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)

题意:给一个顶点和边不超过15W的图,问你这个图的所有连通分量是不是一个完全子图(if the graph is a set of disjoint cliques),对此,我们只需要对所有连通分量跑一下DFS,看看每个连通分量中的边数和顶点数是不是满足完全子图的关系就可以了 cnt_edges != (long long) cnt_vertices * (cnt_vertices - 1)#in

Accepted丶 410

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)                                                            全场题解    菜鸡只会A+B+C,呈上题解:                                    

NYIST_TC_LYQ的博客 825

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D

Description A tree is an undirected connected graph without cycles. The distance between two vertices is the number of edges in a simple path between them. Limak is a little polar bear. He li...

169

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) A

Description Bear Limak wants to become the largest of bears, or at least to become larger than his brother Bob. Right now, Limak and Bob weighaandbrespectively. It's guaranteed that Limak...

144

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) B

Description Bear Limak examines a social network. Its main functionality is that two members can become friends (then they can talk with each other and share funny pictures). There ...

135
上一篇: Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined)
下一篇: Codeforces problem 750E New Year and Old Subsequence
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值