zoukankan      html  css  js  c++  java
  • D. Hemose in ICPC ? 题解(二分+dfs序+交互)

    题目链接

    题目思路

    交互题十有八九是二分

    这个是对边进行dfs序,然后二分边求出那条最大的边

    代码

    #include<bits/stdc++.h>
    #define pii pair<int,int>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+5,inf=(1ll<<31)-1,mod=1e9+7;
    const double eps=1e-6;
    int n;
    vector<int> g[maxn];
    pair<int,int> pa[maxn];
    int cnt;
    int query(int l,int r){
        set<int> se;
        for(int i=l;i<=r;i++){
            se.insert(pa[i].fi);
            se.insert(pa[i].se);
        }
        cout<<"? "<<se.size()<<" ";
        for(auto x:se){
            cout<<x<<" ";
        }
        cout<<endl;
        int x;  cin>>x;
        return x;
    }
    void dfs(int u,int fa){
        for(auto x:g[u]){
            if(x==fa) continue;
            pa[++cnt]={u,x};
            dfs(x,u);
        }
    }
    signed main(){
        cin>>n;
        for(int i=1,u,v;i<=n-1;i++){
            cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        dfs(1,1);
        int ma=query(1,n-1);
        int l=1,r=n-1,ans=1;
        while(l<=r){
            int mid=(l+r)/2;
            int tmp=query(l,mid);
            if(tmp==ma){
                ans=mid;
                r=mid-1;
            }else{
                l=mid+1;
            }
        }
        cout<<"! "<<pa[ans].fi<<" "<<pa[ans].se<<endl;
        return 0;
    }
    
    
    
    不摆烂了,写题
  • 相关阅读:
    开发基于键值对形式的语言管理器LauguageManager
    基于Json(键值对)配置文件的配置管理器
    Unity换装效果
    技能冷却效果的制作
    c#中的反射
    委托和事件的区别
    字典
    有序列表
    链表

  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15367173.html
Copyright © 2011-2022 走看看