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;
}
单片机按键识别篇---单击---双击----长按   最近做一任务需要使用一个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复用情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,又上网看了些例程,算是对于按键的识别有点小小的了解,感觉这个功能挺实用,在此做个随笔。 一、思路   1.识别长按操作思路:我们使用系统定时器定时,然后让系统每过一段时间去扫描按键I/O... 阅读详情

相关推荐

光学设计必知:Ansys Zemax中6种系统孔径类型的适用场景全解析

本文深入解析Ansys Zemax中6种系统孔径类型的适用场景,包括入瞳直径、像方空间F/#、物方空间NA等,帮助光学设计师精准控制光线选择和成像质量。通过实际案例和代码示例,详细讲解各孔径类型的计算原理、参数设置及在显微系统、激光扩束等场景中的优化策略,提升复杂光学系统设计效率。

weixin_29266007的博客 552

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

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

ZSQ 460

AD20丝印层导入图片logo保姆级教程(附黑白预览避坑技巧)

本文提供了一份详尽的AD20丝印层导入图片Logo的实战指南。核心在于将图片预处理为高质量的单色BMP位图,并独家分享了利用Windows画图工具进行“黑白预览”的关键技巧,以提前规避转换失真。教程涵盖了从脚本获取、图片处理、参数设置到生产规范的完整流程,帮助硬件工程师高效、准确地在PCB的Top Overlay层添加个性化标识。

weixin_29194255的博客 386

codeforces gym 101142G Gangsters in Central City

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

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

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 643

BH1750光强度传感器Stm32f103驱动(已测试ok)

1. 实验:Stm32f103 驱动 bh1750采集光照强度,串口打印采集到的数据。 2. 实验准备器材 开发版:stm32f103c8t6 器件:bh1750 GY-302 开发环境:win10,KILE4 下载程序的软件:FlyMcu.exe 串口调试助手:ComAssistant.exe 3. BH1750 的接线 VCC:5V或3.3V ...

weixin_53329977的博客 8930

G. Gangsters in Central City

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

weixin_30460489的博客 224

【大模型工程局】告别单打独斗:手把手带你构建多智能体系统(MetaGPT 启示录)

想象一下,不再是只有一个全知全能的 AI,而是有一群各有所长、能够独立思考和行动的“智能体”(Agent)。它们生活在一个共同的环境中,可以相互交流、协作完成共同目标,也可能为了有限资源而相互竞争。这就是多智能体系统(MAS)的核心图景。MAS 的关键特征:自治性 (Autonomy):每个智能体都能独立感知环境、做出决策并执行动作,无需外部直接控制。交互性 (Interaction):智能体之间可以通过某种通信机制(显式或隐式)交换信息、协调行为。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1184

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

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

Cabinfever的专栏 1243

微信小程序 - 解决web-view嵌套H5网页白屏问题,将h5网页嵌套在webview页面出现无法加载一片空白,详解微信小程序<web-view>页面跳转出现白屏情况(无论本地还是线上H5都能解决)

微信小程序解决web-view打开网页在手机上出现白屏的问题,小程序web-view嵌套H5项目白屏问题分析及解决,使用web-view组件加载H5网页链接后白屏情况,小程序嵌套的h5网页中跳转页面时也有可能出现白屏问题,嵌套webview页面时,出现白屏,WebView 加载不出网页,微信小程序<web-view>页面跳转出现白屏解决方法,解决WebView白屏空白,H5内嵌第三方小程序打开白屏,微信小程序嵌入h5页面加载空白,微信小程序web-view跳转h5白屏,解决微信小程序web-view打开网页

🏆 前端领域优质创作者 1万+

Freeswitch DTMF 按键无法接收问题修复

freeswitch 在接收到 update后,会更新成新的 payload type,但是给的200响应,仍然是旧的,这时候就会导致手机侧认识需要发送旧的payload,所以发到 fs 后就会导致直接丢包,不去处理RTP包了。呼叫时需要设置通道变量 rtp_manual_rtp_bugs=ACCEPT_ANY_PAYLOAD ,这时候FS 就不会对包的payload进行判断,直接判定通过。应该修复 freeswitch 给响应时,应该根据收到的 payload 发送给手机,但是一直未找到正确的路径。

2301_81507069的博客 373

Gym101142G Gangsters in Central City

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

dielie6462的博客 199

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

余额充值