热身训练1 ping ping ping
题意:
一棵树,n+1 个节点,以0号节点为根,给出端点(a,b),节点a到节点b的路径上,至少有一个点是“坏掉的”,求“坏掉的点”最少
分析:
Step1:贪心
每次给出的两个端点,我们可以得到他俩的lca,画一下图我们即可知道,lca深度越深,下面的点就越需要单独选一下,并且选了之后,对lca在上面的点影响不大
同时,我们每次选一段路径上的点时,肯定选深度较低的,这样最优
Step2:线段树标记选过的点
我们选过的节点,那么它的子树我们都可以不用选了
用DFS序+线段树,标记。
easy~~~
#include<bits/stdc++.h>
using namespace std;
#define re register int
#define LL long long
const int N=30005, M=50005;
int tt, las[N], nt[M], ed[M];
inline void add(const int x, const int y)
{
ed[++tt]=y; nt[tt]=las[x]; las[x]=tt;
}
int dep[N], in[N], ou[N], fa[N][25], total;
void DFS(const int x, const int FA)
{
dep[x]=dep[FA]+1;
in[x]=++total;
fa[x][0]=FA;
for(re i=1;i<=20;++i) fa[x][i] = fa[fa[x][i-1]][i-1];
for(re i=las[x];i;i=nt[i])
{
int v=ed[i];
if(v != FA)
{
DFS(v, x);
}
}
ou[x]=total;
}
inline int lca(int x,int y)
{
if(dep[x] < dep[y]) swap(x, y);
int del = (dep[x] - dep[y]);
for(re i=0;i<=20;++i) if(del&(1<<i)) x = fa[x][i];
if(x == y) return x;
for(re i=20;i >= 0;--i)
if(fa[x][i] != fa[y][i])
x = fa[x][i], y = fa[y][i];
return fa[x][0];
}
int n, m, ans;
struct rdin{int a, b, ca;}ask[50005];
bool cmp(const rdin&x, const rdin&y)
{
return dep[x.ca] > dep[y.ca];
}
struct segment{int a, b, v;}tr[N<<3];
inline void build(const int p, const int x, const int y)
{
tr[p]=(segment){x, y, 0};
if(x != y)
{
int mid=(x+y)>>1;
build(p<<1, x, mid);
build(p<<1|1, mid+1, y);
}
}
void modi(const int p, const int x, const int y)
{
if(x <= tr[p].a && tr[p].b <= y)
{
tr[p].v = 1;
return;
}
int mid=(tr[p].a+tr[p].b)>>1;
if(x <= mid) modi(p<<1, x, y);
if(y > mid) modi(p<<1|1, x, y); tr[p].v = (tr[p<<1].v && tr[p<<1|1].v);
}
int query(const int p, const int x)
{
if(tr[p].v == 1)
{
return 1;
}
if(tr[p].a == x && x == tr[p].b)
{
return tr[p].v;
}
int mid=(tr[p].a+tr[p].b)>>1;
if(x <= mid) return query(p<<1, x);
else return query(p<<1|1, x);
}
signed main()
{
while(scanf("%d",&n) != EOF)
{
ans = tt = total = 0;
memset(las, 0, sizeof(las)); for(re i=1;i<=n;++i)
{
int x, y;
scanf("%d%d",&x,&y);
x++; y++;
add(x, y);
add(y, x);
}
n++;
DFS(1, 0);
scanf("%d",&m);
for(re i=1;i<=m;++i)
{
scanf("%d%d",&ask[i].a,&ask[i].b);
ask[i].a++; ask[i].b++;
ask[i].ca = lca(ask[i].a, ask[i].b);
}
sort(ask+1, ask+1+m, cmp);
build(1, 1, n+5);
for(re i=1;i<=m;++i)
{
int a=query(1, in[ask[i].a]);
int b=query(1, in[ask[i].b]);
if(a==0 && b==0)
{
modi(1, in[ask[i].ca], ou[ask[i].ca]);
ans++;
}
}
printf("%d\n", ans);
}
}
热身训练1 ping ping ping的更多相关文章
- 死亡之ping(Ping of Death)
最简单的基于IP的攻击可能要数著名的死亡之ping,这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度.产生这样的包很容易,事实上,许多操作系统都提供了称为ping的网络工具.在为Wind ...
- Windows防火墙开启ping,禁ping的配置
当我通过本机Ping另一台在同一局域网内(即在同一网段)的计算机时,发现,如果防火墙开启的话,无论如何也ping不通.一旦关闭防火墙就可以ping通了.这是为什么呢?究竟该怎么设置呢? 原因是这样的, ...
- Windows防火墙开启ping,禁ping的配置方法
Windows 7,Win 2008 R2,2012 R2: Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 - ICMP ...
- 无法上外网, ping网关ping不通的解决——arp命令
转自:http://jingyan.baidu.com/article/3c48dd34873909e10be35894.html 转自:http://man.linuxde.net/arp 用来管理 ...
- Linux Centos7使用ping命令ping不通网络的解决方案
本解决方案不配置dns,都是ping的IP地址,所以如果想ping域名,则加上DNS项的配置后自行尝试吧 我使用的虚拟机系统信息: Linux:Centos7 Network:虚拟机设置的桥接模式(自 ...
- 数位dp & 热身训练7
数位dp 数位dp是一种计数用的dp,一般就是要统计一段区间$[L,R]$内,满足一定条件的数的个数,或者各个数位的个数. 数位dp使得暴力枚举变为满足一定状态的记忆化,更加优秀. 数位dp常常会考虑 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...
- 热身训练4 Eighty seven
Eighty seven 简要题意: n个卡片,其中第i个卡片的数值为$a[i]$.一共q次询问,每次询问将删去其中3个卡片(可能删除若干相同的卡片)后,问能否选出10个卡片,数值之和等于87. n≤ ...
- 热身训练2 The All-purpose Zero
The All-purpose Zero 简要题意: 长度为n的数组,每个数字为S[i],$0$是一种很神奇的数字,你想要的,它都可以变! 问这个序列的最长上升子序列长度为多少? 分析: 我们将除了 ...
随机推荐
- ajax获取图片
<img id="contents2_img" alt="" src="images/hope.png" style="wi ...
- 反射应用和获取Class对象的三种方式
一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...
- Windows中nginx多次启动的问题
在Windows上做开发环境中的nginx服务器.为了使nginx在后台运行,使用如下命令来启停nginx: cd <nginx安装目录> # 开启nginx并在后台运行 start ng ...
- fontawesome图标不显示的原因
1.查看css路径是否正确 2.查看font文件夹内的字体文件是否引入 3.查看font文件夹内的字体资源路径是否正确
- 鸿蒙内核源码分析(管道文件篇) | 如何降低数据流动成本 | 百篇博客分析OpenHarmony源码 | v70.01
百篇博客系列篇.本篇为: v70.xx 鸿蒙内核源码分析(管道文件篇) | 如何降低数据流动成本 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...
- P5212-SubString【LCT,SAM】
正题 题目链接:https://www.luogu.com.cn/problem/P5212 题目大意 开始一个字符串\(S\),有\(n\)次操作 在\(S\)末尾加入一个字符串 询问一个串在\(S ...
- CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
正题 题目链接:https://www.luogu.com.cn/problem/CF585E 题目大意 给出一个大小为\(n\)的可重集\(T\),求有多少个它的非空子集\(S\)和元素\(x\)满 ...
- 如何通过云效Flow完成自动化构建—构建集群
如何通过云效Flow完成自动化构建-构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付 ...
- 宝塔Linux面板搭建与安全狗安装(WEB服务器搭建与WAF安装)
环境 系统:CentOS 7.3 (64位) 软件: 宝塔Linux 7.7 网站安全狗Linux-Apache版V2.3.18809(64位) 宝塔面板 下载和安装 网址:https://www.b ...
- 网络基础--简单理解什么是DNS? TCP? UDP? Http? Socket?
什么是IP 协议? 协议就是为了实现网络通信而创建的一系列规范. 通常我们的网络模型从上到下共分为4层: 应用层, 传输层, 网络层 和数据链路层. IP协议属于网络层协议,它精确定义了网络通信中 ...