zoukankan      html  css  js  c++  java
  • CF1174F

    https://dudulu.net/blog/?p=1696

    #include<bits/stdc++.h>
    using namespace std;
    #define fp(i,l,r) for(register int (i)=(l);i<=(r);++(i))
    #define fd(i,l,r) for(register int (i)=(l);i>=(r);--(i))
    #define fe(i,u) for(register int (i)=front[(u)];(i);(i)=e[(i)].next)
    #define mem(a) memset((a),0,sizeof (a)) 
    #define O(x) cerr<<#x<<':'<<x<<endl
    inline int read(){
    	int x=0,f=1;char ch=getchar();
    	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    	return x*f;
    }
    void wr(int x){
    	if(x<0)x=-x,putchar('-');
    	if(x>=10)wr(x/10);
    	putchar('0'+x%10);
    }
    const int MAXN=200010;
    vector<int>G[MAXN],buc;
    int sze[MAXN],hson[MAXN],dep[MAXN],depx,n;
    void dfs1(int u,int f){
    	sze[u]=1;
    	for(auto v:G[u])if(v!=f){
    			dep[v]=dep[u]+1;dfs1(v,u);sze[u]+=sze[v];
    			if(sze[v]>sze[hson[u]])hson[u]=v;
    	}
    }
    void dfs2(int u){
    	int t=u;buc.clear();
    	while(t)buc.push_back(t),t=hson[t];
    	printf("d %d
    ",buc.back());fflush(stdout);
    	int dis=read(),depy=(dep[buc.back()]+depx-dis)/2;
    	int y=buc[depy-dep[u]];
    	if(depy==depx){
    		printf("! %d
    ",y);return;
    	}
    	printf("s %d
    ",y);fflush(stdout);dfs2(read());
    }
    main(){
    	n=read();
    	fp(i,1,n-1){
    		int x=read(),y=read();G[x].push_back(y);G[y].push_back(x);
    	}
    	puts("d 1");fflush(stdout);depx=read();
    	if(!depx){puts("! 1");return 0;}
    	dfs1(1,0);dfs2(1);
    	return 0;
    }
    
    
  • 相关阅读:
    iOS 之 内存管理
    php的异步并行扩展swoole
    如何用php实现qq登陆网站
    php分页类
    php的分页代码
    一个小的投票系统
    php如何判断两个时间戳是一天
    PHP中出现Notice: Undefined index的三种解决办法
    vmvare如何安装xp虚拟机
    windows2003安装
  • 原文地址:https://www.cnblogs.com/misaka10047/p/13228170.html
Copyright © 2011-2022 走看看