2098. Asm.Def的病毒

★☆   输入文件:asm_virus.in   输出文件:asm_virus.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

“这就是我们最新研制的,世界上第一种可持久化动态计算机病毒,‘创世纪’。”方教授介绍道。

“哦。”主席面无表情地点点头。

“‘创世纪’无法真正杀死透明计算网络,但是可以把它变成傻子。可惜透明计算网络能轻松地辨认出病毒,所以我建议……”

“为什么不伪装呢?”Asm.Def说。

“当然不行,它比我们更懂伪装。”

“我是说,把我们的病毒伪装成杀毒软件。”

方教授震惊地盯着Asm.Def看了一会。“你是个天才。”

Asm.Def想把病毒伪装成杀毒软件,入侵透明计算网络。透明计算网络的文件结构是一棵N个节点的树,每个病毒可以入侵一条路径上的所有节点。但如果两个病毒入侵了同一个节点,由于它们伪装成了杀毒软件,就会自相残杀。Asm.Def不希望这样的情况发生,所以他需要仔细制定入侵计划。为此,他需要频繁地询问,两条路径是否经过同一个节点(即是否相交)。

【输入格式】

第一行两个整数N,Q。

接下来N-1行,每行两个整数a,b,表示(a,b)是树上的一条边。

接下来Q行,每行四个整数s1,t1,s2,t2,表示询问s1~t1的路径是否与s2~t2的路径相交。

【输出格式】

对每个询问,若相交则输出一行”YES”,否则输出一行”NO”。

【样例输入】

6 5
1 2
1 3
2 4
4 5
4 6
1 1 5 6
1 2 6 3
2 3 5 6
6 4 3 1
4 3 1 2

【样例输出】

NO
YES
NO
NO
YES

【提示】

N,Q<=1000.

1<=s1,t1,s2,t2<=N。

水题:在树上的两条路径经过同一个点的条件是这两条路径有共同的lca,这样说也不是很准确。

我们来这样看

我们看2 ,7与4 ,5显然他们两个的路径上相交的,我们来看,2 7的lca为4 、4 5的lca为1.这两值并不相同啊,但是我们可以发现,如果这两条路径相交那么这两组lca中上深度深的那个lca一定与另一组数其中一个值的lca一定为那个深度深的lca。不信?!我们来看这个图,2、7的lca为4,4 、5的lca为1,这样深度深的lca为4,他与5的lca恰好是1,并且这两组路径相交。

代码:

#include<cstdio>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1100
using namespace std;
vector<int>vec[N];
int n,m,x,y,q,p,root;
int fa[N],top[N],deep[N],size[N];
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
}
int lca(int x,int y)
{for(;top[x]!=top[y];){if(deep[top[x]]<deep[top[y]])swap(x,y);x=fa[x];}if(deep[x]>deep[y])swap(x,y);return x;
}
int dfs(int x)
{size[x]=1;deep[x]=deep[fa[x]]+1;for(int i=0;i<vec[x].size();i++)if(vec[x][i]!=fa[x]){fa[vec[x][i]]=x;dfs(vec[x][i]);size[x]+=size[vec[x][i]];}
}
int dfs1(int x)
{int t=0;if(!top[x]) top[x]=x;for(int i=0;i<vec[x].size();i++)if(vec[x][i]!=fa[x]&&size[vec[x][i]]>size[t])t=vec[x][i];if(t) top[t]=top[x],dfs1(t);for(int i=0;i<vec[x].size();i++)if(vec[x][i]!=fa[x]&&vec[x][i]!=t)dfs1(vec[x][i]);
}
int main()
{freopen("asm_virus.in","r",stdin);freopen("asm_virus.out","w",stdout);n=read(),m=read();for(int i=1;i<n;i++){x=read(),y=read();fa[y]=x;vec[x].push_back(y);vec[y].push_back(x);}dfs(1),dfs1(1);for(int i=1;i<=m;i++){x=read(),y=read(),q=read(),p=read();int Lca=lca(x,y),LCA=lca(q,p);//printf("%d %d\n",Lca,LCA);if(deep[Lca]<deep[LCA])swap(Lca,LCA),swap(x,q),swap(y,p);if(lca(Lca,q)==Lca||lca(Lca,p)==Lca) printf("YES\n");else printf("NO\n");}return 0;
}

转载于:https://www.cnblogs.com/z360/p/7411760.html

cogs——2098. Asm.Def的病毒相关推荐

  1. COGS 2091. Asm.Def的打击序列

    ★★★   输入文件:asm_lis.in   输出文件:asm_lis.out   简单对比 时间限制:4 s   内存限制:256 MB [题目描述] 白色圆柱形的"蓝翔"号在 ...

  2. [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.     例如,对于直线:   ...

  3. ACM/CF赛制getstart模板

    (包含整型变量快速读入.简易循环和连续容器的迭代器循环的宏定义.调试时的运行时间输出(编译选项应有"DEBUG"宏定义)等)  1 /*====================== ...

  4. 河南省队选拔 HAOI2015 解题报告

    其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目--(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被联赛 ...

  5. [NOIP2011]聪明的质检员

    [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...

  6. [第一讲]DSP28335将Flash中的代码拷贝到RAM中运行

    背景: 近期需要使用28335完成一个简单的逆变器设计,由于开关频率为81kHz,每个开关周期只有12.34us,担心在每个开关期间无法完成相应的计算工作,因此想到了将代码烧写时放在Flash中,初始 ...

  7. 极棒 CAAD 登陆 DEF CON:腾讯安全云鼎实验室上演防御病毒的高端操作

    人工智能的飞速发展正在将世界带入一个全新的维度,但这同时也将网络世界的正邪对抗推入下一个战场. 美国当地时间8月10日,由  GeekPwn 主办的 CAAD Village 登陆世界顶级极客大会 D ...

  8. Billy Belceb病毒编写教程---Win32篇

    正在处理中,请稍后-- Billy Belceb病毒编写教程---Win32篇                                      翻译:onlyu                ...

  9. [翻译]Billy Belceb 病毒编写教程for Win32

    Billy Belceb病毒编写教程---Win32篇                                      翻译:onlyu                            ...

  10. Python实现简易勒索病毒

    一.勒索病毒 简单来说,勒索病毒就是通过加密受害者电脑的本地数据,向受害者勒索赎金的恶意软件.加密勒索软件的核心是加密算法,我自己实现的勒索病毒使用的就是安全度高破解难度大的RSA加密算法.RSA是一 ...

最新文章

  1. AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass
  2. 揭秘鸿蒙系统中的 JS 开发框架
  3. 动态的根据一个资源名获得到对应的资源id
  4. gitHub创建 repository仓库 并推送本地代码到该仓库
  5. C语言数据库公共知识,全国计算机二级C语言公共基础知识数据库设计基础
  6. 你好~520|Python花式表白的几种姿势
  7. [数分提高]2014-2015-2第7教学周第2次课 (2015-04-16)
  8. Scrapy学习-24-集成elasticsearch
  9. sql 查看某用户的连接数 以及 如何删除该用户的会话
  10. 超越java jb51_.net mvc超过了最大请求长度的解决方法
  11. Git 安装和使用教程(更加详细)
  12. [译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数
  13. php 点击菜单栏只刷新局部,layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法...
  14. android sdk救黑砖,华为EC6108 V9C 8G 救黑砖教程及固件下载
  15. 阿里云DataV数据可视化 回调ID详解 API数据展示
  16. 《领域驱动设计》学习笔记
  17. Java static关键字与静态块
  18. yum 装包时,提示Peer cert cannot be verified or peer cert invalid
  19. 在Android手机上将Minecraft国际版地图存档导入中国版(亲测有效)
  20. QGraphicsItem绘制重叠区域

热门文章

  1. 【五校联考5day2】光棍
  2. WIN7计算机如何清除碎片文件,win7怎么清理磁盘碎片 win7磁盘碎片整理打不开怎么办...
  3. 命令行工具下载b站视频
  4. 【致敬雷神】星星之火,可以燎原
  5. h5生成海报到php生成海报
  6. 计算机组成与设计(硬件/软件接口)RISC-V版笔记
  7. Android系统固件包解包、修改(涉及root提权)、打包
  8. matlab方波响应,对周期方波信号进行滤波matlab的实现
  9. 多媒体教学计算机遥控,多媒体教学系统使用说明
  10. django个人博客