P7597 「EZEC-8」猜树 加强版
#include<bits/stdc++.h>
using namespace std;
#define rg register
#define inf 0x3f3f3f3f
#define ll long long
inline int read(){
rg int ret=0,f=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=1;ch=getchar();}
while(isdigit(ch)){ret=ret*10+ch-48;ch=getchar();}
return f?-ret:ret;
}
int n,u,dep[5005],siz[5005],sontree[5005][5005],son[5005];
int fa[5005];
bool vis[5005];
void dfs(int x){
if(!siz[x]) return;
int tmp=sontree[x][rand()%siz[x]+1],cnt=0;
random_shuffle(sontree[x]+1,sontree[x]+siz[x]+1);
for(rg int i=1;i<=siz[x];++i){
if(dep[sontree[x][i]]!=dep[x]+1) continue;
if(tmp==sontree[x][i]) u=0;
else printf("? 1 %d %d\n",sontree[x][i],tmp),fflush(stdout),u=read();
if(u==dep[tmp]-dep[sontree[x][i]]){
son[x]=sontree[x][i];
break;
}
}//找到重儿子。
memset(vis,0,sizeof(vis));
for(rg int i=1;i<=siz[x];++i){
if(dep[sontree[x][i]]==dep[x]+1&&sontree[x][i]!=son[x]){
printf("? 2 %d\n",sontree[x][i]); fflush(stdout);
siz[sontree[x][i]]=read()-1;
int cntnow=0;
for(rg int j=1;j<=siz[sontree[x][i]]+1;++j){
u=read(); vis[u]=1;
if(u!=sontree[x][i]) sontree[sontree[x][i]][++cntnow]=u;
}
}
}//询问轻儿子的子树
for(rg int i=1;i<=siz[x];++i){
if(!vis[sontree[x][i]]&&sontree[x][i]!=son[x])
sontree[son[x]][++siz[son[x]]]=sontree[x][i];
}//根据轻儿子的子树推出重儿子的子树。
for(rg int i=1;i<=siz[x];++i){
if(dep[sontree[x][i]]==dep[x]+1){
fa[sontree[x][i]]=x;
dfs(sontree[x][i]);
}
}//递归处理。
}
signed main(){
n=read();
for(rg int i=2;i<=n;++i){
printf("? 1 1 %d\n",i); fflush(stdout);
dep[i]=read(); sontree[1][++siz[1]]=i;
} //处理深度。
dfs(1);
printf("! ");
for(rg int i=2;i<=n;++i) printf("%d ",fa[i]);
puts("");
fflush(stdout);
return 0;
}
P7597 「EZEC-8」猜树 加强版的更多相关文章
- 「WC 2019」数树
「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...
- [Luogu 3701] 「伪模板」主席树
[Luogu 3701] 「伪模板」主席树 这是一道网络流,不是主席树,不是什么数据结构,而是网络流. 题目背景及描述都非常的暴力,以至于 Capella 在做此题的过程中不禁感到生命流逝. S 向 ...
- 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)
[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
- P3701 「伪模板」主席树
题目背景 byx和手气君都非常都非常喜欢种树.有一天,他们得到了两颗奇怪的树种,于是各自取了一颗回家种树,并约定几年后比一比谁种出来的树更加牛x. 题目描述 很快,这棵树就开花结果了.byx和手气君惊 ...
- 「 hihoCoder 1014 」Trie 树
标题真直接 题目大意 给你 $n$ 个字符串.存到一个字典中.又给你 $m$ 个询问,每个询问给一个字符串,在字典中查出有多少个字符串是以这个字符串为前缀. 解题思路 模板题啊 在每个点设置一个变量 ...
- [Luogu] P3701 「伪模板」主席树
题目背景 byx和手气君都非常都非常喜欢种树.有一天,他们得到了两颗奇怪的树种,于是各自取了一颗回家种树,并约定几年后比一比谁种出来的树更加牛x. 题目描述 很快,这棵树就开花结果了.byx和手气君惊 ...
- 【luoguP3701】「伪模板」主席树
description byx和诗乃酱都非常都非常喜欢种树.有一天,他们得到了两颗奇怪的树种,于是各自取了一颗回家种树,并约定几年后比一比谁种出来的树更加牛x. 很快,这棵树就开花结果了.byx和诗乃 ...
- Solution -「51nod 1868」彩色树
\(\mathcal{Description}\) Link & 双倍经验 Link. 给定一棵 \(n\) 个结点的树,每个结点有一种颜色.记 \(g(u,v)\) 表示 \(u\) ...
- LuoguP3701 「伪模板」主席树
题面 这个题很有意思啊... 其实是道最大流板子题,只连byx会赢的边,S向byx连,另一个连T... 注意有长者时连的边加上同方mogician的个数... 还要注意mogician可以无限续命,也 ...
随机推荐
- pikachu 不安全的url跳转
不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生&q ...
- VLAN-5 利用三层交换机实现vlan间的路由
一.实验拓扑图 二.实验编址 三.实验步骤 1.给对应的PC设置对应的IP和掩码还有接口,以及根据需要划分不同的vlan区域,再用文本标记出不同部门. 2.启动设备(全选) 3.首先用ping命令检查 ...
- python的基础---常用的正则表达式
"""# 一.re 模块 1.作用:根据规则去匹配字符串 2.表达式:匹配字符串的规则 3.常用方法 findall():[掌握]匹配所有的字符串,把匹配结果作为一个列表 ...
- NOIP 模拟 6 模板
题目 题解 这道题是一道启发式合并的题目,每次合并完重构一下线段树就可以,不用线段树合并. 以操作时间为下标,建立一颗线段树,维护小球的个数与小球的颜色数,最后线段树上二分查找. 我们先不用考虑每个节 ...
- jpa中遇到关键字
@Column(name = "`rank`") 或者 @Column(name = "\"use\"")
- PHP随手记2--获取随机n位不重复字符
定义一个函数返回26英文字母中n位不重复随机字符 基本思路是利用内置函数生成随机数,取出该位置字母之后将其删除,再进行下一次随机,最后实现字符串拼接就ok! 代码很简单,通俗易懂,直接上代码吧: 1 ...
- C#录音从声卡
原文 http://stackoverflow.com/questions/18812224/c-sharp-recording-audio-from-soundcard 我想从我的声卡(输出)录 ...
- MyBatis like报错
错误的likeSQL语句是这么写的 select * from student name like '%#{name}%' 下面是错误信息 Parameter index out of range ( ...
- shiro登录源码
//1.获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager Factory<org.apache.shiro.mgt.SecurityManage ...
- @RequestParam注解的详细介绍
@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参. 有三个属性: (1)v ...