链接: http://codeforces.com/contest/1174/problem/F
题意: 给你一颗树,需要你求出某个已知点,你有两种询问操作

问你能否在36次询问之内得知所求点

思路: 交互题的套路一般就是通过询问不断缩小范围逼近答案,如每次把范围缩小一半,这样就在logn次内询问出来
这道题的做法就在于如何缩小范围,官方题解的做法预处理出子树的大小,通过找出重链,通过询问重链与未知点的关系,来缩小范围

#include<bits/stdc++.h>
#define INF 0x3f3f3f
using namespace std;
typedef long long ll;
const int N=2e5+5;
vector<int>edge[N];
int sz[N],depth[N];
int query(char op,int x)
{printf("%c %d\n",op,x);fflush(stdout);int ans;scanf("%d",&ans);return ans;
}int pre(int x,int fa)
{sz[x]=1;for(int i=0;i<edge[x].size();i++){int v=edge[x][i];if(v==fa)continue;depth[v]=depth[x]+1;sz[x]+=pre(v,x);}/*for(int u:edge[x]){if(u!=fa){depth[u]=depth[x]+1;sz[x]+=pre(u,x);}}*/return sz[x];
}int dx;
vector<int>tmp;void get(int x)
{tmp.push_back(x);int big=-1;for(int u:edge[x]){if(sz[x]>sz[u]&&(big==-1||sz[u]>sz[big])){big=u;}}if(big!=-1)get(big);
}int dfs(int x)
{tmp.clear();get(x);int tmpp=tmp.back();int dy=(dx+depth[tmpp]-query('d',tmpp))/2;int y=tmp[dy-depth[x]];if(dx==dy)return y;return dfs(query('s',y));
}int main()
{int n;scanf("%d",&n);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);edge[u].push_back(v);edge[v].push_back(u);}dx=query('d',1);pre(1,0);printf("! %d\n",dfs(1));fflush(stdout);return 0;
}

Codeforces#1157 F. Ehab and the Big Finale (思维+交互题)相关推荐

  1. Ehab and the Big Finale ( 交互题)

    题目 https://codeforces.com/contest/1174/problem/F 题意 给你一个n个节点树,有一个未知的x点,让你有限次询问找到x 询问的方式有两种 1.d y 询问x ...

  2. Codeforces Round #563 (Div. 2)-F. Ehab and the Big Finale

    地址:https://codeforces.com/contest/1174/problem/F 思路:思维+分治 官方题解:https://codeforces.com/blog/entry/673 ...

  3. Codeforces Round #563 (Div. 2) F. Ehab and the Big Finale

    后续: 点分治标程 使用father数组 比使用vis数组优秀(不需要对vis初始化) https://codeforces.com/problemset/problem/1174/F https:/ ...

  4. CF #563 Div2 F. Ehab and the Big Finale //树链剖分(模板)+ 交互

    题意:给一颗树,和一个隐藏的节点x,在36次询问内求出x. 每次询问: 1.询问x到某一结点u的距离   2.某个节点u到x的路径上,得到u的儿子节点(u必须是x的祖先,否则WA). 思路: 首先处理 ...

  5. Ehab and the Big Finale【交互】【树链剖分】

    题目链接:https://codeforces.com/contest/1174/problem/F 参考题解:https://dudulu.net/blog/?p=1696 #include < ...

  6. codeforces 1064 E. Dwarves, Hats and Extrasensory Abilities (交互题,二分)

    题目:http://codeforces.com/contest/1064/problem/E 题意:给定n个点,要求每次自己给出一个点的坐标(整数点),这时系统会给出该点的颜色(黑或白),要求最后存 ...

  7. “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】

    校赛~校赛~ Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Description SDUT 的校赛是从 20 ...

  8. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  9. CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)

    CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换)   首先一共有四个操作,第一个和第四个都是线段树的基本操作,直接用线段树实现.      第 ...

最新文章

  1. php更新点击数,始终如一的坚守,PHP对数据更新的更优解
  2. 《C程序员:从校园到职场》出版预告(1):从“高大上”到“柴米油盐”
  3. java的this_java的this是什么意思
  4. 函数声明和变量声明提升
  5. Centos7.5虚拟机无法ping通网关、外网IP地址
  6. SQL注入之堆叠注入(sql-lab第38关)
  7. numpy找到矩阵中不同元素的种类_基于NumPy和图像分类的人工神经网络构建
  8. androidtabhost缓存_Android学习笔记(一):TabHost存放多个Activity
  9. 巡逻机器人用应用的pc端车牌识别
  10. 引用另一个Android工程的方法详解
  11. 厉害了!牛顿法深度学习优化器,效果比肩SGD和Adam
  12. sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”...
  13. 多窗口下的批量操作脚本 - 利用win32gui和WindowSpy++简单实现目标窗口前置
  14. PS批量处理_将图片批量转为jpg
  15. 游戏动作3d模型素材推荐 精品 小众
  16. animals中文谐音_魔力红歌曲Aanimals中文谐音,就是音译歌词
  17. 机载激光雷达原理与应用科普(一)
  18. FBReader导入eclipse 和Androidstudio相关问题
  19. 病毒之Worm.Win32.AutoRun
  20. 使用kubeadm部署k8s(2、k8s集群部署)

热门文章

  1. 以太网交换机 VLAN 生成树协议
  2. Pandas——ix vs loc vs iloc区别
  3. 在投票系统方法的原则刷票(突破ip限制刷票PHP版)
  4. 46.QDateTimeEdit
  5. 智慧人社政务云平台建设方案架构案例介绍
  6. 华为笔试题-素数伴侣
  7. 常见外挂分类及原理概述
  8. 为诺亚方舟实验室,1亿组图文对,填补中文开源多模态数据集空白
  9. vue用 echarts 显示区域地图 并用不同颜色显示每个区域
  10. js点击缩略图,整屏居中放大图片