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;
}
别再让会议变‘回音壁’:手把手教你调优WebRTC的AEC3回声消除(附实战代码) 本文深入解析WebRTC的AEC3回声消除技术,提供从参数调优到声学环境适配的实战指南。通过诊断回声特征、解剖核心参数(如filter.length_blocks和delay_estimate_smoothing)以及应对特殊场景(如密闭空间与开放办公区),帮助开发者有效解决视频会议中的回声问题,提升语音通信质量。附有实战代码和调试工具,适合需要优化实时通信体验的开发者。 阅读详情

相关推荐

【实战指南】OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

hampeter的博客 1802

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

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

ZSQ 460

DataWorks PyODPS第三方包全攻略:从打包到加载的完整流程

本文详细介绍了在DataWorks的PyODPS节点中使用第三方Python包的完整流程,包括环境限制、打包工具pyodps-pack的使用、资源上传与加载实战,以及特殊场景处理技巧。通过本文,开发者可以掌握在MaxCompute受限环境中灵活使用自定义依赖的方法,提升数据处理效率。

dd012的博客 990

codeforces gym 101142G Gangsters in Central City

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

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

说一说系统/子系统规格说明

《系统/子系统规格说明》都是从用户的角度以软件的维度来描述系统的功能、性能、业务流程、数据流和控制流等,并描述内外部接口需求、资源使用情况等.

weixin_40725543的博客 5429

电商秒杀场景下,如何用Redis+Lua脚本实现原子性库存扣减(附完整代码)

本文针对电商秒杀场景下的高并发与超卖难题,详细解析了如何利用Redis的原子性命令与Lua脚本实现可靠的库存扣减。通过对比多种方案,阐述了Redis+Lua作为黄金搭档的技术原理,并提供了从基础扣减到预扣减模型的完整代码实现,确保在高并发下数据的一致性与系统性能。

weixin_29219539的博客 503

G. Gangsters in Central City

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

weixin_30460489的博客 224

基于Python的海关进出口数据爬取与贸易关系分析

本文介绍了如何使用Python爬虫技术获取海关进出口数据,并基于这些数据进行贸易关系分析。文章详细阐述了数据采集、清洗、存储和分析的全过程,使用了最新的爬虫技术和数据分析方法,为国际贸易研究提供数据支持和技术参考。关键词:Python爬虫、海关数据、贸易分析、数据可视化、Selenium、Scrapy。

2201_76125261的博客 544

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

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

Cabinfever的专栏 1243

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1196

《派出你的AI同事:WorkBuddy案例实战》067:按行业分类的案例索引

按行业分类的案例索引 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 99

Gym101142G Gangsters in Central City

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

dielie6462的博客 199

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

diangan7073的博客 310

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、付费专栏及课程。

余额充值