首页 > 其他分享 >2024.11.16模拟赛

2024.11.16模拟赛

时间:2024-11-17 16:57:16浏览次数:1  
标签:2024.11 16 int back 查询 dep 权值 push 模拟

总结:日常犯困,日常去厕所清醒,日常疯狂调试,不日常四个半小时的模拟赛。打了T1的60分暴力+特殊样例,T4的40分暴力+特殊样例,但是T1不知道为什么\(dfs\)爆栈了,所以没骗到特殊样例的分,T4特殊样例式子推错,也没骗到分,所以最后T1 30分,T4 20分,共50分,挂了50分

关于T1:四个人,想了四个半小时,摸到了正解的边,但不多……

题目小链接


T1【细胞】

题目大意:

给定一棵以1为根、共\(n\)个节点的树,开始每个节点都有一个点权,每过一秒,每个点的权值会变成它父节点的权值。

现在给出\(m\)个操作,每次操作可以查询当前时间点\(v\)的权值,或给点\(v\)的权值加\(k\)(先转移再增加)。特别地,若\(v\)为叶子结点,那么每次它的权值会加上它父节点的权值。\((1\leqslant n\leqslant 5\times 10^{5})\)

解题思路:

直接模拟的复杂度为\(O(nm)\),不可以。我们可以想到,对于\(t\)时间询问的点\(v\),会直接对该点产生贡献的祖先点\(u\)满足\(dep_{u}=dep_{v}-t\)(若\(v\)是叶子节点,那么产生贡献的点满足\(dep_{u}\leqslant dep_{v}-t)\)。

所以对于每次查询\(v\)就是要求会对该点产生贡献的点的权值和。但由于存在修改操作,所以是带修查询,区间查询+单点修改,想到树状数组维护。(什么?我还是不会树状数组……)

离线存储\(m\)个操作,跑一遍\(dfs\),若节点\(u\)存在修改操作,那么就相当于是刚开始在\(dup_{u}-t\)处有一权值(此时路径上的查询操作已经处理完,此次修改不会影响路径前面的查询,只会修改路径后的查询——但要注意回溯以及偏移量),若存在查询操作,查询区间和就行。(也有可能是单点查询哦?)

乖代码
#incIude <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mp make_pair
using namespace std;
const int N=5e5+5;//注意偏移量 
int n,m;
vector <int> tr[N];
vector <pii> add[N];//时间,修改
vector <int> que[N]; 
int cnt[N<<1];
int ans[N];
queue <int> ot;

int dep[N];
int lowbit(int x) { return x&-x; }
void _update(int t,int x)
{
	while (t<=(N<<1))
	{
		cnt[t]+=x;
		t+=lowbit(t);
	}
}
int _sum(int x)
{
	int res=0;
	while (x)
	{
		res+=cnt[x];
		x-=lowbit(x);
	}
	return res;
}
void dfs(int x,int _fa)
{
	bool flag=false;
	if (tr[x].size()==1) flag=true;//叶子结点 
	dep[x]=dep[_fa]+1;
	
	int _size1=add[x].size();
	for (int i=0;i<_size1;i++) _update(dep[x]-add[x][i].first+N,add[x][i].second);//先单点修改 
	
	int _size2=que[x].size();
	for (int i=0;i<_size2;i++)
	{
		int p=que[x][i];//查询时间点 
		if (flag) ans[p]+=_sum(dep[x]+N)-_sum(dep[x]-p+N-1);
		else ans[p]+=_sum(dep[x]-p+N)-_sum(dep[x]-p+N-1);
	}
	
	int _size3=tr[x].size();
	for (int i=0;i<_size3;i++)
	{
		int v=tr[x][i];
		if (v==_fa) continue;
		dfs(v,x);
	}
	
	for (int i=0;i<_size1;i++) _update(dep[x]-add[x][i].first+N,-add[x][i].second);//回溯
}
signed main()
{
	cin>>n>>m;
	for (int i=1,x,y;i<n;i++)//存储树 
	{
		cin>>x>>y;
		tr[x].push_back(y);
		tr[y].push_back(x);
	}
	for (int i=1,x;i<=n;i++) cin>>x,add[i].push_back({0,x});//单点修改 
	for (int i=1;i<=m;i++)
	{
		char op;
		int v,k;
		cin>>op;
		if (op=='+') cin>>v>>k,add[v].push_back({i,k});//单点修改 
		else cin>>v,que[v].push_back(i),ot.push(i);//区间查询 
	}
	dfs(1,0);
	while (!ot.empty()) cout<<ans[ot.front()]<<'\n',ot.pop();
	return 0;
}

标签:2024.11,16,int,back,查询,dep,权值,push,模拟
From: https://www.cnblogs.com/Myyy-L/p/18550747

相关文章

  • GBK&Unicode -2024/11/16
    UTF-8是一种编码规则为什么会有乱码:读取数据时未读完整个汉字编码和解码的方式不统一如何不产生乱码不要使用字节流读取文本文件编码解码时使用同一个码表,同一个编码方式publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{......
  • 2024.11.16 2024 CCPC济南站
    Solved:5/13Penalty:707Rank:101Rank(ucup):200比赛链接A.TheFool题意:给一个\(n\timesm\)的字符串矩阵,有一个字符串和其他不同,求这个字符串的位置。直接模拟即可。#include<bits/stdc++.h>usingnamespacestd;constintN=205;stringa[N];intmain(){ios::s......
  • 学期2024-2025-1 学号20241416 《计算机基础与程序设计》第8周学习总结
    作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08||这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行||作......
  • 关于中国《危房鉴定标准》的具体要求和细则,主要由**《建筑结构检测评定标准》(GB/T 503
    关于中国《危房鉴定标准》的具体要求和细则,主要由**《建筑结构检测评定标准》(GB/T50344-2015)和《危险房屋鉴定标准》**(JGJ125-2016)进行规范。这些标准为各类建筑特别是老旧房屋的安全鉴定、加固与维修提供了明确的依据。以下是有关危房鉴定标准的主要内容:1. 危房鉴定的基本原......
  • Alpha冲刺(4/14)——2024.11.15
    目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表一、团队成员分工与进度成员完成的任务完成的任务时长剩余时间施......
  • 使用 Raku 编写简单的文字识别模拟程序
    Raku(以前称为Perl6)是一种现代的多范式编程语言,支持函数式编程、面向对象编程等多种编程风格。它有着强大的正则表达式支持,并且语法灵活,适合用于文本处理和其他各类程序设计。本文将使用Raku编写一个简单的模拟文字识别程序,判断输入的字符矩阵是否与预定义的字符模式匹配。项......
  • 使用 Elm 编写简单文字识别模拟程序
    Elm是一种主要用于构建Web应用程序的函数式编程语言。它以其强大的类型系统和无运行时错误的设计闻名。虽然Elm的主要用途是前端开发,但我们可以通过其纯函数式的特性,模拟一个简单的文字识别程序。项目目标通过Elm创建一个字符模式匹配模拟程序,识别一个5x5像素矩阵是否......
  • 20241116
    T1医生厨神秘贪心题。不会。不懂。考虑当\(\maxA_i\lex\)时,可以直接从大往小干。否则需要不断扩大\(x\)使得其超过\(\maxA\)。我们考虑在一个时刻,若存在一个\(a\)使得\(a\lex\land2a\gex\),那我们直接把这个\(a\)干掉是不劣的,因为你现在干掉这个至多只会拖......
  • 模拟赛 2
    11.16T2先考虑前两个限制,发现都是与奇偶性相关的,考虑建二分图,在不考虑第三个限制下是一个最大独立集计数。发现由于连边方式是每一位向相邻两位连边,那么最大独立集数一定是\(\frac{n}{2}\),并且一定形如先选一段奇数再选一段偶数的形式。再考虑一下第三个限制,考虑对每个配对的......
  • esxi6.7 安装仿真网络模拟器PNetLab v6版本
    安装仿真网络模拟器PNetLabv6版本Installationinstructions-PNetLabv6BETAreleaseReadthefullinstructionsandimportantnotesbeforestartingtheprocess.Afteryoufinishreadingthem,followtheprocessstepbystep.Step1DownloadtheUbuntuServer......