cogs——2098. Asm.Def的病毒
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的病毒相关推荐
- COGS 2091. Asm.Def的打击序列
★★★ 输入文件:asm_lis.in 输出文件:asm_lis.out 简单对比 时间限制:4 s 内存限制:256 MB [题目描述] 白色圆柱形的"蓝翔"号在 ...
- [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线: ...
- ACM/CF赛制getstart模板
(包含整型变量快速读入.简易循环和连续容器的迭代器循环的宏定义.调试时的运行时间输出(编译选项应有"DEBUG"宏定义)等) 1 /*====================== ...
- 河南省队选拔 HAOI2015 解题报告
其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目--(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被联赛 ...
- [NOIP2011]聪明的质检员
[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...
- [第一讲]DSP28335将Flash中的代码拷贝到RAM中运行
背景: 近期需要使用28335完成一个简单的逆变器设计,由于开关频率为81kHz,每个开关周期只有12.34us,担心在每个开关期间无法完成相应的计算工作,因此想到了将代码烧写时放在Flash中,初始 ...
- 极棒 CAAD 登陆 DEF CON:腾讯安全云鼎实验室上演防御病毒的高端操作
人工智能的飞速发展正在将世界带入一个全新的维度,但这同时也将网络世界的正邪对抗推入下一个战场. 美国当地时间8月10日,由 GeekPwn 主办的 CAAD Village 登陆世界顶级极客大会 D ...
- Billy Belceb病毒编写教程---Win32篇
正在处理中,请稍后-- Billy Belceb病毒编写教程---Win32篇 翻译:onlyu ...
- [翻译]Billy Belceb 病毒编写教程for Win32
Billy Belceb病毒编写教程---Win32篇 翻译:onlyu ...
- Python实现简易勒索病毒
一.勒索病毒 简单来说,勒索病毒就是通过加密受害者电脑的本地数据,向受害者勒索赎金的恶意软件.加密勒索软件的核心是加密算法,我自己实现的勒索病毒使用的就是安全度高破解难度大的RSA加密算法.RSA是一 ...
最新文章
- AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass
- 揭秘鸿蒙系统中的 JS 开发框架
- 动态的根据一个资源名获得到对应的资源id
- gitHub创建 repository仓库 并推送本地代码到该仓库
- C语言数据库公共知识,全国计算机二级C语言公共基础知识数据库设计基础
- 你好~520|Python花式表白的几种姿势
- [数分提高]2014-2015-2第7教学周第2次课 (2015-04-16)
- Scrapy学习-24-集成elasticsearch
- sql 查看某用户的连接数 以及 如何删除该用户的会话
- 超越java jb51_.net mvc超过了最大请求长度的解决方法
- Git 安装和使用教程(更加详细)
- [译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数
- php 点击菜单栏只刷新局部,layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法...
- android sdk救黑砖,华为EC6108 V9C 8G 救黑砖教程及固件下载
- 阿里云DataV数据可视化 回调ID详解 API数据展示
- 《领域驱动设计》学习笔记
- Java static关键字与静态块
- yum 装包时,提示Peer cert cannot be verified or peer cert invalid
- 在Android手机上将Minecraft国际版地图存档导入中国版(亲测有效)
- QGraphicsItem绘制重叠区域