Codeforces Round #300 E. Demiurges Play Again CF538E
首先考虑二分答案
假设是求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相关推荐
- Codeforces Round #300 E - Demiurges Play Again
E - Demiurges Play Again 感觉这种类型的dp以前没遇到过... 不是很好想.. dp[u] 表示的是以u为子树进行游戏得到的值是第几大的. #include<bits/s ...
- 贪心 Codeforces Round #300 A Cutting Banner
题目传送门 1 /* 2 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx, 3 接下来mx次循环,若是0,输出0:若是1,输出1,s[j]--: 4 注意:之前的0的要忽略 ...
- Codeforces Round #300 A. Cutting Banner 水题
A. Cutting Banner Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- 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= ...
- Codeforces Round #538 (Div. 2) (CF1114)
Codeforces Round #538 (Div. 2) (CF1114) 今天昨天晚上的cf打的非常惨(仅代表淮中最低水平 先是一路缓慢地才A掉B,C,然后就开始杠D.于是写出了一个O( ...
- Educational Codeforces Round 112(Div.2) ABC题解
D题好像可以做一做,挖个坑以后做好了来填(doge Educational Codeforces Round 112(Div.2) 题目列表 1.A 2.B 3.C 1.A 原题链接 题目大意 有三种 ...
- Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces-题解
目录 Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces Problem Description Input Outp ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
最新文章
- KS103超声波测距模块
- 20180625笔记
- 电脑退出全屏按哪个键_电脑键盘上的F1到F12,每一个都是快捷键大家都会用到...
- 第34 memcached缓存
- opencv怎么2个摄像头_最后2个月,怎么做能够快速提分?
- SQL Server数据库索引的基础知识
- 不了解沙特,那你就看不懂硅谷
- CentOS下GitLab的安装部署
- html不同类别的列表设置,HTML --列表
- ABB 机器人DH参数
- 深度学习(6): RNN
- Linode跨节点迁移:从Tokyo到Fremont
- 驭势吴甘沙:我的根本利益|Xtecher人物特稿
- 解决Mysql 主从或主主报1062错误
- 专业软件测试工程师必备之软件测试要学什么技能?
- mysql基础约束详解
- 【转】初入NLP领域的一些小建议
- 学习Python,经常见到PEP,那么PEP是什么呢?
- 为什么手机网速太慢_为什么手机网速很慢;为什么手机信号满格,网速却很慢?...
- [转载]手机号码IP地址归属地查询