首先考虑二分答案
假设是求max 那么把>=mid 的数字都变成1 另外的都变为0

假设是A操作的时候那么肯定选一个需要放1尽量少的儿子下去
(因为二分的是mid)
假设是B操作那么要让他底下能选的地方都是1才能让他选到>=mid

那么其实这样算出来的其实就是答案了

当求min的时候就反过来

A操作的时候要让底下能选的都是0
B操作的时候选一个最少的0的下去

#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <queue>
#include <cstdio>
#include <map>
#include <set>
#include <utility>
#include <stack>
#include <cstring>
#include <cmath>
#include <vector>
#include <ctime>
#include <bitset>
using namespace std;
#define pb push_back
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d%d",&n,&m)
#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define sld(n) scanf("%lld",&n)
#define sldd(n,m) scanf("%lld%lld",&n,&m)
#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)
#define sf(n) scanf("%lf",&n)
#define sff(n,m) scanf("%lf%lf",&n,&m)
#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)
#define ss(str) scanf("%s",str)
#define ans() printf("%d",ans)
#define ansn() printf("%d\n",ans)
#define anss() printf("%d ",ans)
#define lans() printf("%lld",ans)
#define lanss() printf("%lld ",ans)
#define lansn() printf("%lld\n",ans)
#define fansn() printf("%.10f\n",ans)
#define r0(i,n) for(int i=0;i<(n);++i)
#define r1(i,e) for(int i=1;i<=e;++i)
#define rn(i,e) for(int i=e;i>=1;--i)
#define rsz(i,v) for(int i=0;i<(int)v.size();++i)
#define szz(x) ((int)x.size())
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define lowbit(a) (a&(-a))
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define mp make_pair
#define lrt rt<<1
#define rrt rt<<1|1
#define X first
#define Y second
#define PI (acos(-1.0))
#define sqr(a) ((a)*(a))
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1000000000+7;
const double eps=1e-9;
const int inf=0x3f3f3f3f;
const ll infl = 10000000000000000;
const int maxn=  200000+10;
const int maxm = 40000+10;
//Pretests passed
int in(int &ret)
{char c;int sgn ;if(c=getchar(),c==EOF)return -1;while(c!='-'&&(c<'0'||c>'9'))c=getchar();sgn = (c=='-')?-1:1;ret = (c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9')ret = ret*10+(c-'0');ret *=sgn;return 1;
}vector<int>g[maxn];
int leave;
bool bot[maxn];
void dfs(int u,int f)
{int cnt = 0;rsz(i,g[u]){int v = g[u][i];if(v==f)continue;cnt++;dfs(v,u);}if(!cnt)++leave,bot[u]=1;
}
int dfs1(int u,int lev,int f)
{int sz = g[u].size();if(bot[u])return 1;if(lev&1){int mn = inf;r0(i,sz){int v = g[u][i];if(v==f)continue;mn = min(mn,dfs1(v,lev+1,u));}
//        if(mn==inf)mn = 1;return mn;}else{int res = 0;r0(i,sz){int v = g[u][i];if(v==f)continue;res += dfs1(v,lev+1,u);}
//        if(!res)res = 1;return  res;}
}
int main()
{
#ifdef LOCALfreopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
#endif // LOCALint n;sd(n);r1(i,n-1){int u,v;sdd(u,v);g[u].pb(v);g[v].pb(u);}dfs(1,0);int mx = dfs1(1,1,0);mx = leave +1 - mx;int mn = dfs1(1,0,0);
//    mn = leave +1 - mn;printf("%d %d",mx,mn);return 0;
}

Codeforces Round #300 E. Demiurges Play Again CF538E相关推荐

  1. Codeforces Round #300 E - Demiurges Play Again

    E - Demiurges Play Again 感觉这种类型的dp以前没遇到过... 不是很好想.. dp[u] 表示的是以u为子树进行游戏得到的值是第几大的. #include<bits/s ...

  2. 贪心 Codeforces Round #300 A Cutting Banner

    题目传送门 1 /* 2 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx, 3 接下来mx次循环,若是0,输出0:若是1,输出1,s[j]--: 4 注意:之前的0的要忽略 ...

  3. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr. (2)(2)(2) 求ϕ(∏i= ...

  6. Codeforces Round #538 (Div. 2) (CF1114)

    Codeforces Round #538 (Div. 2) (CF1114)   今天昨天晚上的cf打的非常惨(仅代表淮中最低水平   先是一路缓慢地才A掉B,C,然后就开始杠D.于是写出了一个O( ...

  7. Educational Codeforces Round 112(Div.2) ABC题解

    D题好像可以做一做,挖个坑以后做好了来填(doge Educational Codeforces Round 112(Div.2) 题目列表 1.A 2.B 3.C 1.A 原题链接 题目大意 有三种 ...

  8. Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces-题解

    目录 Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces Problem Description Input Outp ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. KS103超声波测距模块
  2. 20180625笔记
  3. 电脑退出全屏按哪个键_电脑键盘上的F1到F12,每一个都是快捷键大家都会用到...
  4. 第34 memcached缓存
  5. opencv怎么2个摄像头_最后2个月,怎么做能够快速提分?
  6. SQL Server数据库索引的基础知识
  7. 不了解沙特,那你就看不懂硅谷
  8. CentOS下GitLab的安装部署
  9. html不同类别的列表设置,HTML --列表
  10. ABB 机器人DH参数
  11. 深度学习(6): RNN
  12. Linode跨节点迁移:从Tokyo到Fremont
  13. 驭势吴甘沙:我的根本利益|Xtecher人物特稿
  14. 解决Mysql 主从或主主报1062错误
  15. 专业软件测试工程师必备之软件测试要学什么技能?
  16. mysql基础约束详解
  17. 【转】初入NLP领域的一些小建议
  18. 学习Python,经常见到PEP,那么PEP是什么呢?
  19. 为什么手机网速太慢_为什么手机网速很慢;为什么手机信号满格,网速却很慢?...
  20. [转载]手机号码IP地址归属地查询

热门文章

  1. 400报错 bad request
  2. ABT 节点 v1.0.19 今天更新发布 | ArcBlock 动态
  3. 多级分销系统数据库模型(猜想)
  4. 超全的关于UITabview 使用介绍
  5. XGBoost 分类模型的Python实现
  6. UART在rtt下驱动实现
  7. 央美“毕业”开画展,少女画家小冰开放绘画能力为亿万人作画
  8. Sympy代数符号运算库
  9. 中南大学:误解已解除!
  10. 网上找外贸客户怎么找? 找外贸客户的方法