Gym 101142G Gangsters in Central City【思维+Lca】

PCIe调试进阶:除了测眼图,如何用IP配置调优Gen4链路均衡(以Xilinx/Intel IP为例) 本文深入探讨了PCIe Gen4链路调优的进阶方法,重点介绍了如何通过IP配置优化解决稳定性问题。文章详细解析了Xilinx和Intel IP的寄存器配置技巧、均衡策略选择及动态监控体系,帮助工程师在不依赖昂贵测试设备的情况下提升链路性能。特别适合已通过基础眼图测试但仍有间歇性错误的场景。 阅读详情

题意:

  • 给一棵树,叶子节点为房子,q次操作,节点1为根节点(蓄水池)向房子供水
  • 每次操作有两种类型,+ x 强盗占领了编号为x的房子,- x强盗离开了编号为x的房子。
  • 对每次操作,ans1计算出最少卡住几个节点使得强盗占领的房子都没水喝,ans2卡住这些点后没有被强盗占领的房子通不了水的数量最小,每次输出这两个数

思路:

  • 对根节点,如果有k个直接连接的点,拆成k棵子树。每棵有强盗占领的子树肯定最多只需要卡住一个点,那ans1就是k个子树中有强盗的的子树数量。
  • 对每棵子树求出被强盗占领的点dfs序最大的和最小的两个点的lca就是这棵子树中被强盗占领的所有的点的lca。处理出每个节点下有多少个房子(sz[i]),那么求出lca后,先减去没进行这次操作前这个子树的贡献,然后再加上这个操作,求出这颗子树上的点的lca,再加上这棵子树的贡献。ans2=sz[lca]-强盗占领的点。

代码:

#include<bits/stdc++.h>
using namespace std;
#define rep(i,s,t) for(int i=(s);i<(t);++i)
#define per(i,s,t) for(int i=((t)-1);i>=(s);--i)
#define pb push_back
#define dd(x) cout<<#x<<'='<<x<<' '
#define de(x) cout<<#x<<'='<<x<<'\n'
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef vector<int> vi;
const int N=1e6+5;
int dp[N][20],n;
vi G[N];
set<int>st[N]; //维护第i棵子树中的dfs序
int tot,ver[N*2],R[N*2],First[N*2],bel[N],sz[N],cut[N];
 //cut[i] 第i棵子树中强盗占领的房子数量 
//bel[i],节点i属于那棵子数
// First[u] u节点的在ver中第一次出现的下标,即dfs序
bool vis[N];
void dfs(int u,int dep){
    vis[u]=true;ver[++tot]=u;First[u]=tot;R[tot]=dep;
    rep(i,0,G[u].size()){
        int v=G[u][i];
        if(!vis[v]){
            dfs(v,dep+1);
            ver[++tot]=u;
            R[tot]=dep;
        }
    }
}
void ST(){
    rep(i,1,tot+1){
        dp[i][0]=i;
    }
    for(int j=1;(1<<j)<=tot;++j){
        for(int i=1;i+(1<<j)-1<=tot;++i){
            int a=dp[i][j-1];http://codeforces.com/group/aUVPeyEnI2/contest/229510/attachments
            int b=dp[i+(1<<(j-1))][j-1];
            if(R[a]<R[b])dp[i][j]=a;
            else dp[i][j]=b;
        }
    }
}
int RMQ(int l,int r){
    int k=0;
    while(1<<(k+1)<=r-l+1){
        k++;
    }
    int a=dp[l][k],b=dp[r-(1<<k)+1][k];
    return R[a]<R[b]?a:b;
}
int LCA(int u,int v){
    int res=RMQ(u,v);
    return ver[res];
}
void Dfs(int u,int rt){
    bel[u]=rt;
    vis[u]=true;
    if(G[u].size())sz[u]=0;
    else sz[u]=1;
    rep(i,0,G[u].size()){
        int v=G[u][i];
        if(!vis[v]){
            Dfs(v,rt);
            sz[u]+=sz[v];
        }
    }
}
int main()
{
    tot=0;
    memset(vis,0,sizeof(vis));
    memset(sz,0,sizeof(sz));
    int q,p;
    scanf("%d%d",&n,&q);
    rep(i,2,n+1){
        scanf("%d",&p);
        G[p].pb(i);
    }
    dfs(1,1);
    ST();
    memset(vis,0,sizeof(vis));
    rep(i,0,G[1].size()){
        Dfs(G[1][i],i+1);
    }
    int ans1=0,ans2=0;
    char op[10];
    int x,fa,mi,ma,lca;
    while(q--){
          scanf("%s%d",op,&x);
          if(op[0]=='+'){
                fa=bel[x];
                if(cut[fa]){
                    mi=*st[fa].begin(),ma=*st[fa].rbegin();
                    lca=LCA(mi,ma);
                    ans2-=sz[lca]-cut[fa];
                }
                if(cut[fa]==0)ans1++;
                cut[fa]++;
                st[fa].insert(First[x]);
                mi=*st[fa].begin(),ma=*st[fa].rbegin();
                lca=LCA(mi,ma);
                ans2+=sz[lca]-cut[fa];
          }
          else{
                fa=bel[x];
                mi=*st[fa].begin(),ma=*st[fa].rbegin();
                lca=LCA(mi,ma);
                ans2-=sz[lca]-cut[fa];
                if(cut[fa]==1)ans1--;
                cut[fa]--;
                st[fa].erase(First[x]);
                if(cut[fa]){
                    mi=*st[fa].begin(),ma=*st[fa].rbegin();
                    lca=LCA(mi,ma);
                    ans2+=sz[lca]-cut[fa];
                }
          }
          printf("%d %d\n",ans1,ans2);
    }
    return 0;
}
Isaac Sim 6 利用Replicator实现高效语义分割与实例分割(实践指南5.10) 本文详细介绍了如何利用Isaac Sim 6的Replicator工具高效生成语义分割和实例分割数据集。通过虚拟环境自动标注,效率提升20倍以上,特别适用于农业机器人等计算机视觉项目。文章包含环境配置、场景构建、批量标注技巧及实例分割处理等实战指南,帮助开发者快速掌握合成数据生成技术。 阅读详情

相关推荐

软考中级信息系统监理师(第二版)-第21章基础设施工程监理

由于网络信息技术的飞速发展,变化日新月异,网络设计不但要保证目前网络传输容量的要求,也要考虑今后网络的发展,满足当前以及今后相当一段时间内的网络需求,便于向新技术的升级和衔接,同时又需要保护原有的投资。通用布缆系统工程中,承建单位的竣工文档主要包括以下内容:承建合同,招标文件,投标文件,设计方案,工程实施组织设计方案,工程施工报告,隐蔽工程记录,变更记录,自测报告,信息点分布图(表),园区、楼宇、水平配线表,楼层平面图及无线设备点位图,无线设备信息表,竣工图纸等。多排安装时,列间距不应小于1200mm。

2301_78583973的博客 1400

GYM 101142 G.Gangsters in Central City(树链剖分LCA)

Description 给出一棵nn个节点的树,根节点为11表示水源,叶子节点表示住户,水沿着树边流向住户,两种操作 1.+ v+\ v,表示vv住户有小偷进入,保证之前vv住户没有小偷 2.− v-\ v表示vv住户里的小偷离开,保证之前vv住户有小偷 每次操作结束后,问至少需要断几条树边可以使得所有有小偷的住户没有水喝,在断边数最少的前提下,使得没有进小偷但被断水的住户数最少 I

ZSQ 460

Kubernetes+EdgeX:构建企业级AI边缘推理平台

设备:工业摄像头(RTSP协议,输出1920x1080视频流);AI模型:YOLOv8训练的轴承裂纹检测模型(识别“裂纹”“正常”两种类型);目标:摄像头采集图像→EdgeX传输数据→K8s推理服务检测→结果反馈到报警器(HTTP协议)。Kubernetes+EdgeX的组合,为企业构建AI边缘推理平台提供了标准化、可扩展标准化:K8s的容器编排和EdgeX的设备管理,都是行业标准,避免“重复造轮子”;可扩展:支持从单边缘节点到 thousands of nodes 的规模,满足企业的增长需求;

AI算力网络与通信的博客 1344

codeforces gym 101142G Gangsters in Central City

简略题意:一棵树,每个节点有一个局面,根是水源,边是水管。初始每个居民都有水喝。 操作有两种: ‘+ v’, v处的居民楼被强盗占领。 ‘- v’, v处的强盗走了。 对于每个询问,你需要切断一些水管,使得所有强盗没水喝,没水喝的居民尽量少。因为必须有边切才行,所以需要切除的边数最多就是与原来的根相连的边的数目。 原来的树拆成了若干个子树,每个子树的根也有一个边可以切除。单独考虑每个子树的

即使摸爬滚打,满身泥泞,我也要前进 447

Visual MODFLOW Flex 6.1新手入门:从数据导入到3D建模的完整工作流解析

本文为Visual MODFLOW Flex 6.1新手提供了从零开始构建地下水数值模型的完整工作流指南。详细解析了从项目规划、数据准备与导入,到构建三维概念模型、生成并运行数值模型,直至结果可视化与校准的核心步骤。帮助水文地质与环工领域初学者快速掌握这一专业软件,高效完成从数据到三维建模的全过程。

a1b2c的博客 801

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8116

G. Gangsters in Central City

给出一棵$1$为根节点的含$n$个节点的树,叶子节点都是房屋,在一个集合里面添加房屋和移除房屋。 每一次添加和移除后,回答下面两个问题。 1. 使得已选房屋都不能从根节点到达,最少需要砍多少条边。 2. 在第$1$问最少砍去边的条件下,如何砍边使得从节点点开始走不能到达的非已选房屋数目最小,输出最小值。 对于100%的数据 , $2 ≤ n ≤ 10^5 , 1 ≤ q ...

weixin_30460489的博客 224

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest G - Gangsters in Central City

题目大意现有一颗有根树,叶子节点可被染成黑色(最开始都是白色),也可以被染回白色,现在问给出每次染色信息后(即带修改),最少需要切断几条边保证黑色叶子不在树上,且在此条件下最少有多少白色叶子不在树上。解题思路大体算法:DFS序+倍增 很容易发现,被切断的边数最多只需要与根节点相连的边数,因为根节点连出去的每颗子树最多只需要一条边就可以切断,所以每颗子树都是独立的。 这样问题就转化为了找出每课子树

Cabinfever的专栏 1243

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

本文详细介绍了Ribo-seq数据的质控分析流程,重点讲解了使用fastp进行原始数据质控的关键步骤和参数设置。作者通过Snakemake自动化流程示例,展示了如何去除接头序列、过滤低质量reads、生成质控报告等操作。文章强调高质量的Ribo-seq数据对转录后调控和翻译动态研究的重要性,并提供了兼顾数据质量和下游分析需求的参数配置建议。该流程有助于研究人员规范高效地完成Ribo-seq数据质控,为后续分析提供可靠数据基础。

785

光学设计仿真软件:Code V_(8).场曲和色差校正

通过以上步骤和代码示例,用户可以更好地理解如何在Code V中进行场曲和色差的校正。这些技术不仅有助于提高光学系统的成像质量,还可以为后续的光学设计提供重要的参考。在实际应用中,用户可以根据具体需求选择合适的校正方法和优化策略,以达到最佳设计效果。

kkchenjj的博客 1784

Gym101142G Gangsters in Central City

题目链接:https://cn.vjudge.net/problem/Gym-101142G 知识点:  DFS序、LCA 题目大意:   给定一棵有根树(根为 \(1\))。每次修改叶子节点会被染成黑色(最开始都是白色的),也可以被染回白色。给出 \(q\) 次修改,对每次修改问最少需要切断几条边就能保证黑色叶子不在树上,和保证用最少的切断数使得黑色叶子不在树上的前提下最少会有多...

dielie6462的博客 199

Python爬虫实战:使用最新技术爬取GitHub Trending项目

本文将详细介绍如何使用Python最新技术栈构建一个高效的GitHub Trending爬虫。我们将使用异步请求库httpx、HTML解析库parsel、数据存储方案以及反反爬技术,完整实现一个能够稳定获取GitHub Trending数据的爬虫系统。文章包含5000余字详细教程,从环境搭建到代码实现,再到数据处理和存储,最后部署运行,提供全方位指导。GitHub Trending页面展示了GitHub上当前最受欢迎的项目,对于开发者了解技术趋势、发现优秀项目非常有价值。

2201_76125261的博客 738

Gangsters in Central City Gym - 101142G

https://vjudge.net/problem/Gym-101142G #include <iostream> #include <cstring> #include <queue> #include <vector> #include <algorithm> #include <cstdio> #include ...

newhonor 195

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Gym 101142G Gangsters in Central City (动态倍增LCA+DFS序性质)

#include<bits/stdc++.h> using namespace std; #define debug cout<<"YES\n"; #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #define ll long long #define lrt int l,int r,int rt #define ...

满月照亮的路 258

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

GYM/101142 Problem G. Gangsters in Central City (dfs序+lca+set)

题意:给你一棵树 1为根节点(水源),叶子节点为村民 现在有一些小偷入侵了村庄 我们现在想切断水源 使得小偷渴死 每个小偷有一个入侵和离开的时间 求 我们最少需要切断多少次以及被断水影响到的村民个数 思路:学习了付队的博客 我们以水源连的边作为子树的根(暂记做k),求得每个子树的叶子节点个数 我们用set记录 以k为根节点的子树的小偷 的dfs序 因为我们要尽量少删边 直接求d...

diangan7073的博客 310

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Codeforces Gym 101142 G. Gangsters in Central City (最近公共祖先)

题意树的根节点为水源,编号为 1 。给定编号为 2, 3, 4, …, n 的点的父节点。已知所有叶节点都是房子。有 q 个操作,每个操作可以是下列两者之一: + v ,表示编号为 v 的房子被歹徒占领。 - v ,表示歹徒退出编号为 v 的房子。 初始所有房子都没有歹徒。对于每次变化后,要求删除最少的边,使得所有有歹徒的房子均无法与水源连通;同时,在此基础上要求受影响的普通房子数量最少。解题思路令

DorMOUSENone的博客 897

鸿蒙Flutter原生视图同层渲染:从烤皮纹理到真身合成的混合开发实践

混合开发中,将原生视图嵌入Flutter页面一直面临渲染层级隔离的难题。Flutter通过自绘UI与GPU直渲构建独立绘制体系,而系统原生控件活在另一套视图层级里,传统方案只能采用离屏渲染或纹理贴图,将原生内容“烤”成图片再合成,由此带来了触摸延迟、掉帧和画质损失。鸿蒙Flutter引擎基于统一渲染合成框架,实现了PlatformView的同层混合合成,让原生组件与Flutter UI共享同一渲染树,视频播放、相机预览、地图等高频实时场景无需经过纹理拷贝即可直接输出,交互与性能显著提升。本文从渲染架构原理出

weixin_34127717的博客 213

Codeforces Gym 101142 G Gangsters in Central City (lca+dfs序+树状数组+set)

题意: 树的根节点为水源,编号为 1 。给定编号为 2, 3, 4, …, n 的点的父节点。已知只有叶子节点都是房子。 有 q 个操作,每个操作可以是下列两者之一: + v,表示编号为 v 的房子被歹徒占领。 - v,表示歹徒退出编号为 v 的房子。 初始所有房子都没有歹徒。对于每次变化后,要求删除最少的边,使得所有有歹徒的房子均无法与水源连通;同时,在此基础上要求受影响的...

weixin_34204722的博客 135

Codeforces Gym 101142G

#include #include #include #include using namespace std; const int N=1e6+10; int n,q; int to[N],nx[N],h[N],sz; int dep[N][25]; int L[N],R[N],b[N],c[N]; int g[N],f[N],t[N]; set s[N]; set::iterator it;

Occult 679

KV Cache技术解析:如何优化Transformer推理显存与计算效率

在Transformer架构中,自注意力机制是核心组件,但其计算过程会产生巨大的临时显存开销,尤其是在自回归生成任务中。其原理涉及查询、键、值向量的计算与交互,导致序列长度的平方级复杂度。这一技术挑战催生了针对推理效率的优化需求,旨在减少重复计算和内存占用。KV Cache作为一种关键技术,通过缓存已生成token的键值对,将重复计算转化为静态存储,显著降低了计算复杂度和显存峰值需求。结合多头注意力及其变体如分组查询注意力,KV Cache在长文本生成、对话系统等场景中实现了高效的推理加速,成为大模型部署中

weixin_34411563的博客 423

Gym - 101142A

团队赛的第一次比赛,这次用的是国外的题,也是我第一次的总结的题,这是这次比赛的第一个比赛的题很水,也是很考验脑子的思路的, 因为是输出任意情况中的一种那么就非常简单了,只要寻找每个点所对应的边界上的点就可以了,看下代码就很容易懂了。 #include #include #include #include #include #include #include #include #include

qq_38069256的博客 478

Gym - 100781G- Goblin Garden Guards

/* 对于每个喷洒点,遍历这个圆的外切正方形内的所有点 */ #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cmath&gt; using namespace std; const int maxn = 1e5+10; const int N = 1e4 + 10; struct Point { int...

刘二狗的博客 346

[codeforces][gym101059C]Gangsters

time limit per test:5.0 s memory limit per test:64 MB You live in a graph G, with N vertices and M edges. P of these vertices have gangsters living on them. You owe each gangster some money, given b...

dxyinme-Zz 335

Gym - 101142F Folding

思路: 因为只能沿与边平行的线折,所以每次折叠相当于缩小两条边中的一条边,而如果当前一条边长为x则折叠后最小为(x+1)/2。所以只要目标长度在[(x+1)/2,x)范围内都能通过一次折叠得到。按照这个思路就很容易求得把长为A的边折成B所需要的次数了。 需要注意的是最后结果并不一定是长边折长边;短边折短边最少。 代码: #include &lt;bits/stdc++.h&gt; ...

vocaloid01的博客 250

Codeforces Gym 101142 J. Java2016 (构造)

题意John likes to learn esoteric programming languages. Recently he discovered the probabilistic programming language Java2K. Built-in functions of Java2K have only a certain probability to do whatever y

DorMOUSENone的博客 988
上一篇: F - Foreign Postcards (dp)
下一篇: 机器学习资料
PinappleMi
博客等级 码龄9年 10粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值