题目大意:
  给你一棵树,其中有一些点是坏掉的。告诉你k个点对表示这两个点的路径上至少有1个点是坏掉的。问整棵树上至少有多少点是坏的。

思路:
  贪心。
  找出每组点对的LCA,对所有点对按照LCA的深度排序。
  然后枚举每一组点对,如果当前的两个结点u和v都没有被标记,则把以其LCA为根的子树标记成坏的,并将LCA算入答案。
  如果当前的两个结点u和v至少有一个被标记,则说明两个结点已经不连通,不需要将其LCA计入答案。

 #include<cstdio>
#include<cctype>
#include<vector>
#include<cstring>
#include<algorithm>
#include<functional>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int V=,logV=;
std::vector<int> e[V];
inline void addedge(const int &u,const int &v) {
e[u].push_back(v);
e[v].push_back(u);
}
int dep[V],anc[V][logV];
inline int _log2(const float &x) {
return ((unsigned&)x>>&)-;
}
void dfs(const int &x,const int &p) {
dep[x]=dep[p]+;
anc[x][]=p;
for(int i=;i<=_log2(dep[x]);i++) {
anc[x][i]=anc[anc[x][i-]][i-];
}
for(unsigned i=;i<e[x].size();i++) {
const int &y=e[x][i];
if(y==p) continue;
dfs(y,x);
}
}
inline int getlca(int x,int y) {
if(dep[x]<dep[y]) std::swap(x,y);
for(register int i=_log2(dep[x]);i>=;i--) {
if(dep[anc[x][i]]>=dep[y]) {
x=anc[x][i];
}
}
if(x==y) return x;
for(register int i=_log2(dep[x]);i>=;i--) {
if(anc[x][i]!=anc[y][i]) {
x=anc[x][i];
y=anc[y][i];
}
}
return anc[x][];
}
struct Path {
int u,v,lca;
Path(const int &u,const int &v,const int &lca) {
this->u=u;
this->v=v;
this->lca=lca;
}
bool operator > (const Path &another) const {
return dep[lca]>dep[another.lca];
}
};
std::vector<Path> lca;
bool mark[V];
void modify(const int &x) {
if(mark[x]) return;
mark[x]=true;
for(unsigned i=;i<e[x].size();i++) {
const int &y=e[x][i];
if(y==anc[x][]) continue;
modify(y);
}
e[x].clear();
}
inline void init() {
for(register int i=;i<V;i++) e[i].clear();
lca.clear();
memset(mark,,sizeof mark);
}
int main() {
register int n;
while(~scanf("%d\n",&n)) {
init();
for(;n;n--) {
addedge(getint(),getint());
}
dfs(,);
for(register int k=getint();k;k--) {
const int &u=getint(),&v=getint();
lca.push_back(Path(u,v,getlca(u,v)));
}
std::sort(lca.begin(),lca.end(),std::greater<Path>());
int ans=;
for(register unsigned i=;i<lca.size();i++) {
const int &u=lca[i].u,&v=lca[i].v,&a=lca[i].lca;
if(mark[u]||mark[v]) continue;
modify(a);
ans++;
}
printf("%d\n",ans);
}
return ;
}

[HDU6203]ping ping ping的更多相关文章

  1. 死亡之ping(Ping of Death)

    最简单的基于IP的攻击可能要数著名的死亡之ping,这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度.产生这样的包很容易,事实上,许多操作系统都提供了称为ping的网络工具.在为Wind ...

  2. Windows防火墙开启ping,禁ping的配置

    当我通过本机Ping另一台在同一局域网内(即在同一网段)的计算机时,发现,如果防火墙开启的话,无论如何也ping不通.一旦关闭防火墙就可以ping通了.这是为什么呢?究竟该怎么设置呢? 原因是这样的, ...

  3. Windows防火墙开启ping,禁ping的配置方法

    Windows 7,Win 2008 R2,2012 R2: Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 - ICMP ...

  4. 无法上外网, ping网关ping不通的解决——arp命令

    转自:http://jingyan.baidu.com/article/3c48dd34873909e10be35894.html 转自:http://man.linuxde.net/arp 用来管理 ...

  5. Linux Centos7使用ping命令ping不通网络的解决方案

    本解决方案不配置dns,都是ping的IP地址,所以如果想ping域名,则加上DNS项的配置后自行尝试吧 我使用的虚拟机系统信息: Linux:Centos7 Network:虚拟机设置的桥接模式(自 ...

  6. Linux下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  7. DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: ...

  8. 本机,同机房,同城,异地,不同城,腾讯云ping延时值

    本机,同机房,同城,异地,不同城,腾讯云ping延时值 ping本机: 0.01ms ping同机房机器: 0.1ms ping同城机器: 1ms ping不同城机器: 20ms 北(南)方ping南 ...

  9. 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: ...

  10. 003.同时Ping多个IP(select实现IO复用,信号计时),ping程序升级版

    写这个的目的主要是为了以后的方便: 1.信号计时函数的使用 2.ip头的构建和icmp头的构建 3.selec函数t的用法 代码实现: /src/ping.h /* * ping.h * * Crea ...

随机推荐

  1. H5学习笔记1

    H5学习笔记 1.创建超链接: target=”_blank”:链接的目标网页会在新的窗口中打开. target=”_parent”:链接的目标会在当前窗口中打开,如果在框架网页中,则会在上一层框架打 ...

  2. shutdown系统调用

    /* * Shutdown a socket. */ SYSCALL_DEFINE2(shutdown, int, fd, int, how) { int err, fput_needed; stru ...

  3. Linux内核跟踪之ring buffer的实现【转】

      转自:http://blog.chinaunix.net/uid-20543183-id-1930845.html ---------------------------------------- ...

  4. RobotFramework安装扩展库包Selenium2Library(三)

    Robot Framework扩展库包 http://robotframework.org/#libraries 一,自动化测试web端 1,pip安装SeleniumLibrary pip inst ...

  5. sql的主键,int类型,自增,自动编号到了规定最大数,接下来数据库会怎么做

    答案:它会从1开始重新编号,但是避开已经重复的值.

  6. @RequestParam,@PathParam,@PathVariable,@QueryParam注解的使用区别

    获取url模板上数据的(/{id})@DefaultValue 获取请求参数的(包括post表单提交)键值对(?param1=10&param2=20).可以设置defaultValue JA ...

  7. Java基础83 JSP标签及jsp自定义标签(网页知识)

    1.JSP标签 替代jsp脚本,用于jsp中执行java代码1.1.内置标签:  <jsp:forward></jsp:forward>  相当于:request.getReu ...

  8. 洛谷P2017晕牛

    传送门啦 这个题没有想象中复杂. 我们先有向边建立,因为我们无法改变有向边的方向. 建立完之后跑一边拓扑排序,我们按拓扑序小的指向大的就好了. 解释: 我们知道如果一个点在另一个点顺序的后面的话,如果 ...

  9. 奇妙的CSS之CSS3新特性总结

    随着CSS3标准的发布,越来越多的浏览器开始支持最新的CSS标准,虽然还有些新特性支持的不够完美,但相信未来的浏览器一定会完全支持CSS3的,毕竟这代表着大趋势!下面l列出来一些CSS3中出现的新特性 ...

  10. ASP.NET中Literal,只增加纯粹的内容,不附加产生html代码

    页面代码 <div style="float: right; color: #666; line-height: 30px; margin-right: 12px;" id= ...