hdu 6203 ping ping ping(LCA+树状数组)

题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通

\(1 <= n <= 1e4\)

\(1 <= m <= 5e4\)

思路:

根据路径的LCA深度从大到小排序,每次选择一个没被删除的LCA删除

当某个点删除时,跨越了以这个点为根的子树的路径都会被割断,而排序保证在同一子树内部的路径已经被处理过了,子树信息可以用dfs序来表示,区间操作可以用左右端点打标记,用树状数组维护即可。

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 1e4 + 10;
vector<int> G[N];
int tot,in[N],out[N];
int dep[N],f[N][20];
int n;
void dfs(int u,int fa,int d){
in[u] = ++tot;
f[u][0] = fa,dep[u] = d;
for(int i = 1;i < 20;i++) f[u][i] = f[f[u][i-1]][i-1];
for(auto v:G[u]) if(v != fa) dfs(v,u,d + 1);
out[u] = tot;
}
int lca(int u,int v){
if(dep[u] < dep[v]) swap(u,v);
int d = dep[u] - dep[v];
for(int i = 19;i >= 0 && u != v;i--) if(d & (1<<i)) u = f[u][i];
if(u == v) return u;
for(int i = 19;i >= 0;i--) if(f[u][i] != f[v][i]) u = f[u][i],v = f[v][i];
return f[u][0];
}
int tr[N];
int lowbit(int x){return x &(-x);}
void up(int pos,int c){
for(;pos <= n;pos += lowbit(pos)) tr[pos] += c;
}
int getsum(int pos){
int ans = 0;
for(;pos;pos -= lowbit(pos)) ans += tr[pos];
return ans;
}
struct Q{
int x,y,xy;
Q(){};
bool operator<(const Q&rhs)const{
return dep[xy] > dep[rhs.xy];
}
}qr[100010];
int main()
{
int u,v;
while(scanf("%d",&n)==1){
n++;
for(int i = 1;i <= n;i++) {
G[i].clear();
tr[i] = 0;
}
for(int i = 1;i < n;i++){
scanf("%d%d",&u,&v);u++,v++;
G[u].push_back(v);
G[v].push_back(u);
}
tot = 0;
dfs(1,0,0);
int q;
scanf("%d",&q);
for(int i = 0;i < q;i++){
scanf("%d%d",&u,&v);u++,v++;
qr[i].x = u,qr[i].y = v,qr[i].xy = lca(u,v);
}
sort(qr, qr + q);
int ans = 0;
for(int i = 0;i < q;i++){
if(getsum(in[qr[i].x]) || getsum(in[qr[i].y])) continue;
ans++;up(in[qr[i].xy],1),up(out[qr[i].xy]+1,-1);
}
cout<<ans<<endl;
}

hdu 6203 ping ping ping(LCA+树状数组)的更多相关文章

  1. hdu 5869 区间不同GCD个数(树状数组)

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  2. HDU 6203 ping ping ping(dfs序+LCA+树状数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意: n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V 无法连 ...

  3. HDU 2492 Ping pong(数学+树状数组)(2008 Asia Regional Beijing)

    Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...

  4. POJ 3928 &amp; hdu 2492 &amp; Uva1428 PingPong 【树状数组】

    Ping pong                                                   Time Limit: 2000/1000 MS (Java/Others)   ...

  5. hdu 1394 Minimum Inversion Number(树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给你一个0 — n-1的排列,对于这个排列你可以将第一个元素放到最后一个,问你可能得到的最 ...

  6. HDU 5792 World is Exploding (树状数组)

    World is Exploding 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 Description Given a sequence ...

  7. HDU 5773 The All-purpose Zero(树状数组)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5773 [题目大意] 给出一个非负整数序列,其中的0可以替换成任意整数,问替换后的最长严格上升序列长 ...

  8. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  9. HDU 5792 World is Exploding(树状数组+离散化)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5792 题意: 思路: lmin[i]:表示左边比第i个数小的个数. lmax[i]:表示左边比第i个 ...

随机推荐

  1. 使用NPOI快速导出导入Excel

    这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...

  2. BigData--hadoop集群搭建之zookeer安装

    Zookeeper安装 cd /opt/ tar -zxvf zookeeper-3.4.10.tar.gzmv zookeeper-3.4.10  /opt/zookeeper修改配置文件cd /o ...

  3. 在linux使用锐捷客户端上网(华中科技大学)

    第一步:下载锐捷客户端linux版本,下载网址为http://ncc.hust.edu.cn/cyxz/rzkhd.htm 第二步:解压该包,进入目录 #unzip RG_Supplicant_For ...

  4. WPF中的ControlTemplate(控件模板)

    原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板)                                             ...

  5. vs2013中将复制过来的文件或文件夹显示到解决方案管理

    先将文件夹和文件复制到VS程序所在的位置,在VS2013解决方案资源管理器中找到这些文件所在的上一级文件夹,先将那个上层文件夹收缩起来,然后再点击解决方案资源管理器上的“显示所有文件”按纽,展开这个文 ...

  6. oracle 11g XE 学习版添加scott用户方法全步骤

    安装企业版的orcale是不是太费时费力了?若只是学习用途的话,不妨试试轻便版的XE版本,同样是官网下载的,但是这个安装起来比完整版简便多了. 首先,你得先安装好orcale 11g XE 版本:(这 ...

  7. 58HouseSearch项目迁移到asp.net core

    前言 58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+mono+jexus,这样看来整个项目基本已经满足跨平台 ...

  8. 类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。

      类 java.util.Collections 提供了对Set.List.Map进行排序.填充.查找元素的辅助方法. 1. void sort(List) //对List容器内的元素排序,排序的规 ...

  9. ASP.NET MVC 使用jquery.form.js 异步上传 在IE下返回值被变为下载的解决办法

    错误记录: <script type="text/javascript"> $(function () { $(document).off("ajaxSend ...

  10. 每天一个Linux命令(14):dpkg命令

    dpkg命令是Debian Linux系统用来安装.创建和管理软件包的实用工具. 语法: dpkg (选项) (参数) 选项: -i:安装软件包: -r:删除软件包: -P:删除软件包的同时删除其配置 ...