CF1044B Intersecting Subtrees 构造+树论
正解:构造
解题报告:
又是一道交互题!爱了爱了!
这题真的,极妙!非常神仙!就非常非常思维题!
直接说解法了吼
说起来实在是简单鸭
就是先问一个对方的联通块中的一个点在我这儿的编号,记为x
如果x就是我联通块中的肯定公共点就是x,continue,不讨论运气这么好的事儿x
然后问我的联通块中离x最近的点在对方那儿的编号,记为y
如果y属于对方的联通块,欧克,说明有公共点,就是y
如果不属于,那就麻油公共点,GG
解释一下吼
如果属于这个不用说趴显然
然后如果不属于,我们令x为树根,那么我这个联通块一定都在x的一棵子树上(因为麻油经过x嘛
然后离x最近的这个节点就是这个子树的根
如果根都不在对方的联通块中其它节点就更麻油机会了鸭
所以就麻油公共点!over!
(不知道为什么,,,我明明是用的psj教的方法做的但是他的代码跑得飞快我跑得飞慢,,,就很难过TT
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define il inline
#define rg register
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=+;
struct ed{ll from,to,nxt;void clr(){from=;to=;nxt=;}}edge[N<<];
ll head[N],cnt;
bool my[N],your[N]; il void ad(int x,int y){edge[++cnt].to=y;edge[cnt].nxt=head[x];head[x]=cnt;}
il ll dfs(int num,int fa)
{
if(my[num])return num;
for(rg ll i=head[num];i;i=edge[i].nxt)
{
if(edge[i].to==fa)continue;
ll temp=dfs(edge[i].to,num);
if(temp!=-)return temp;
}
return -;
}
int main()
{
ll T;cin>>T;
while(T--)
{
ll n,tmp,gdgs,root;cin>>n;
memset(head,,sizeof(head));rp(i,,(n<<))edge[i].clr();memset(my,,sizeof(my));memset(your,,sizeof(your));cnt=;
rp(i,,n-){ll x,y;cin>>x>>y;ad(x,y);ad(y,x);}
cin>>tmp;rp(i,,tmp)cin>>gdgs,my[gdgs]=;cin>>tmp;rp(i,,tmp)cin>>gdgs,your[gdgs]=;
cout<<"B "<<gdgs<<endl;cout.flush();cin>>root;
if(my[root]){cout<<"C "<<root<<endl;cout.flush();continue;}
ll ques=dfs(root,);
if(ques==-){cout<<"C -1\n";cout.flush();continue;}
cout<<"A "<<ques<<endl;cout.flush();
ll as;cin>>as;
if(your[as]){cout<<"C "<<ques<<endl;cout.flush();continue;}
cout<<"C -1\n";cout.flush();
}
return ;
}
我做出了我人生中第一道交互题呜呜呜!
CF1044B Intersecting Subtrees 构造+树论的更多相关文章
- C#结合Jquery LigerUI Tree插件构造树
Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...
- java 根据 根节点及所有子成员 构造树tree
实体类entity package com.ompa.biz.entity; import java.util.ArrayList; import java.util.List; public cla ...
- C# 递归构造树状数据结构(泛型),如何构造?如何查询?
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精 难得有清闲的一上午,索性写篇博客. 首先,我们需要准备一张表,如下范例: create table TreeTable ( TreeId ) no ...
- 简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树
第三篇中,我们通过维护节点的深度level,通过迭代所有的节点,只需要一次,就构造了树. 本篇,换一种方式. 好处是:不维护节点的深度level,增加和修改节点时,也不用维护.递归实现,代码比较清晰 ...
- 简洁常用权限系统的设计与实现(五):不维护节点的深度level,手动计算level,构造树
这种方式,与第三篇中介绍的类似.不同的是,数据库中不存储节点的深度level,增加和修改时,也不用维护.而是,在程序中,实时去计算的. 至于后面的,按照level升序排序,再迭代所有的节点构造树,与 ...
- Object-Widgets-Quick 构造树
Object Tree 当以某个QObject为父类创建一个QObject时, 它会被添加到该父类的children列表中. 析构时, QObjet 会首先检查自己的children, 依次析构, 然 ...
- 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
好不容易又到周五了,周末终于可以休息休息了.写这一篇随笔只是心血来潮,下午问了一位朋友PAT考的如何,顺便看一下他考的试题,里面有最后一道题,是关于给出中序遍历和后序遍历然后求一个层次遍历.等等,我找 ...
- CF1003E Tree Constructing 构造+树论
正解:构造 解题报告: 传送门! 这题麻油翻译鸭,,,那就先大概港下题意趴QAQ 构造一棵n个点,直径为d,每个点点度不超过k的树 这题其实我jio得还是比较简单的趴,,, 首先构造出一条直径,就是一 ...
- 树上的构造 树分治+树重心的性质 Codeforces Round #190 (Div. 2) E
http://codeforces.com/contest/322/problem/E E. Ciel the Commander time limit per test 1 second memor ...
随机推荐
- Linux误删文件后恢复数据
在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs.R-Linux.ext3grep.extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复 ...
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
一个关于协同程序的经典示例是“生产者-消费者”问题.这其中涉及到两个函数,一个函数不断地产生值(比如从一个文件中读取值),另一个则不断地消费这些值(比如将这些值写到另一个文件).通常,这两个函数大致是 ...
- Lua中的table构造式(table constructor)
最简单的构造式就是一个空构造式{},用于创建一个空table. 构造式还可以用于初始化数组.例如,以下语句:days = {"Sunday", "Monday" ...
- [Win32]一个调试器的实现(五)调试符号
一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号. 什么是调试符号 我们知道, ...
- numpy常用举例
转自https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/2-1-np-attributes/ numpy 的属性: ndim: ...
- 【API设计】RESTful API 设计指南
RESTful API URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作. 例如 . REST描述的是在网络中client和server的一种交互形式:REST本身不 ...
- 【架构师之路】 LVS+Keepalived实现高可用负载均衡
一.原理 1.概要介绍 如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态, ...
- Delphi应用程序的调试(六)步进式代码调试
步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...
- DIV高度自适应及注意问题(转)
本文和大家重点讨论一下DIV高度自适应及注意问题,主要包括父div高度随子div的高度改变而改变和子div高度随父亲div高度改变而改变两种情况. DIV高度自适应及注意问题 积累了一些经验,总结出一 ...
- Linux 安装GCC讲解(在线和无网离线)
本文主要介绍如何在无网络的环境下怎么离线安装GCC,如果有网,只需要通过命令 yum install gcc 进行安装就可以了,yum会自动把所有关联的依赖包也一起安装了,一键安装. yum inst ...