Codeforces Round #359(div 2)
A:= v =
B:^ w ^
C:一天n个小时,一个小时m分(n,m十进制),一个手表有两部分,左边表示时,右边表示分,但都是7进制,而且手表上最多只能有7个数字且数字不能重复,现在要你算出能正确表示出多少个时间(不够位需要补0)。因为进制只有7,所以可以枚举所有的7进制数,然后再切成7组,分为左边和右边,判断是否符合n,m条件,计数即可。O(7*7^7)
D:给你一个n个节点的树,有q个询问(n,q<=300000),每次询问一个x,问以x为顶点的子树中,删除哪一个点后使得这个子树剩下的联通块中个数最大的那个中的点数<=原子树点数的一半(答案保证存在,求出一个解即可)。
类似经典的离线LCA,因为询问只跟点个数有关和树形态无关,那么如果节点x的子树答案都出来了,x对应的答案也就出来了(也就是一个树形DP的想法),具体的,x的子树中,个数最大的那个子树中,一定存在一个解(贪心的想法,因为答案一定存在,那么如果最大的那个都不存在,小的就更加不存在),所以f[x]也就在以son[x]为点的子树中。然后如何求出这个呢?是不是就是f[son[x]]呢?那肯定是不一定的。
那么f[x]在f[son[x]]的上方还是下方呢?这其实取决于f[son[x]]在son[x]这个子树中的位置,如果f[son[x]]在子树中偏下(即最大的那个联通块在上方),那么在上面接上更多的点后,如果往f[son[x]]的下方继续寻找,那肯定是不能符合的。如果f[son[x]]在子树中偏上(即最大的那个联通块在下方),那么如果上面接的很少的情况下,也有可能f[x]在f[son[x]]下面的。
难道必须要遍历整个son[x]子树吗?
其实dp是从叶子节点从上做的(叶子节点的f值是自己),所以某个f[x]是这个子树中的什么形态是我们可以人为先确定的,于是我们可以认为确定所有的f[x]都在f[son[x]]上面找,一直保持联通块最大的在上方。于是复杂度就下来了。
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=;
int n,q;
vector<int> g[maxn+];
int f[maxn+],size[maxn+],father[maxn+],son[maxn+];
void dfs(int k,int last)
{
int s=;
for(int i=;i<g[k].size();++i)
{
if(g[k][i]==last) continue;
father[g[k][i]]=k;
dfs(g[k][i],k);
size[k]+=size[g[k][i]];
if(size[g[k][i]]>s) s=size[g[k][i]],son[k]=g[k][i];
}
}
bool check(int k,int j)
{
return max(size[k]-size[j],size[son[j]])<=size[k]/;
}
void dp(int k,int last)
{
if(g[k].size()==&&k!=)
{
f[k]=k;
return;
}
for(int i=;i<g[k].size();++i) if(g[k][i]!=last) dp(g[k][i],k);
int j=f[son[k]];
while(j!=k&&!check(k,j)) j=father[j];
f[k]=j;
}
int main()
{
scanf("%d %d",&n,&q);
for(int i=;i<=n;++i)
{
int x;
scanf("%d",&x);
g[x].push_back(i),g[i].push_back(x);
}
for(int i=;i<=n;++i) size[i]=;
dfs(,);
dp(,);
int x;
for(int i=;i<=q;++i) scanf("%d",&x),printf("%d\n",f[x]);
return ;
}
注意下叶子节点的判断,如果考虑是不是只连了一个点的话,那么还有根节点只连1个点的情况,这时候就要特判是不是根节点了……
E:给你一些三维的点,找一个点使得这个点到其他所有点的最大距离最小(曼哈顿距离)
嘻嘻:https://async.icpc-camp.org/d/465-codeforces-round-359
判定一个ans是否可以即判断是否存在一组整数解(X,Y,Z)满足原不等式。
遇到绝对值不等式就去绝对值,用max,min代替,于是本题列出了3个未知数4个不等式的不等式组,判断是否有整数解。解多元的不等式还是要用换元的思想,将Y+Z当作整体,求出Y+Z的取值范围[L,R](与X有关),然后根据两个不同的不等式得到两个不同的[L,R],要让这个存在,于是可以求出X的取值范围,再带入求Y和Z的,判断是否有解。
总结:绝对值要去掉!多元要整体法!(噫~又想到我那可悲的高中数学)
Codeforces Round #359(div 2)的更多相关文章
- Codeforces Round #359 (Div. 2)C - Robbers' watch
C. Robbers' watch time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #359 (Div. 2) C. Robbers' watch (暴力DFS)
题目链接:http://codeforces.com/problemset/problem/686/C 给你n和m,问你有多少对(a, b) 满足0<=a <n 且 0 <=b &l ...
- Codeforces Round #359 (Div. 1)
A http://codeforces.com/contest/685/standings 题意:给你n和m,找出(a,b)的对数,其中a满足要求:0<=a<n,a的7进制的位数和n-1的 ...
- Codeforces Round #359 (Div. 1) B. Kay and Snowflake dfs
B. Kay and Snowflake 题目连接: http://www.codeforces.com/contest/685/problem/B Description After the pie ...
- Codeforces Round #359 (Div. 1) A. Robbers' watch 暴力
A. Robbers' watch 题目连接: http://www.codeforces.com/contest/685/problem/A Description Robbers, who att ...
- Codeforces Round #359 (Div. 2) B. Little Robber Girl's Zoo 水题
B. Little Robber Girl's Zoo 题目连接: http://www.codeforces.com/contest/686/problem/B Description Little ...
- Codeforces Round #359 (Div. 2) A. Free Ice Cream 水题
A. Free Ice Cream 题目连接: http://www.codeforces.com/contest/686/problem/A Description After their adve ...
- Codeforces Round #359 (Div. 2) C. Robbers' watch 搜索
题目链接:http://codeforces.com/contest/686/problem/C题目大意:给你两个十进制的数n和m,选一个范围在[0,n)的整数a,选一个范围在[0,m)的整数b,要求 ...
- Codeforces Round #359 (Div. 2) D. Kay and Snowflake 树DP
D. Kay and Snowflake After the piece of a devilish mirror hit the Kay's eye, he is no longer int ...
随机推荐
- 烂泥:学习mysql数据库主从同步复制原理
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...
- Linux磁盘管理之日志文件系统和非日志文件系统08
略. 查看linux支持的文件系统命令: ls /lib/module/`uname -r`/x86/fs blkid查看文件系统的类型 mkfs.ext2 == mkfs –t ext2
- tools:context=".MainActivity的作用(转)
android:layout_width="match_parent" android:layout_height="match_parent" android ...
- 配置nginx好了,html能打开,index.php打不开?
启动这2个 #service nginx restart # service php-fpm restart
- Brackets(bestcoder)
Brakerts 每次询问一个区间都根据最开始的线段树在询问的区间重建一棵线段树 view code#include <iostream> #include <cstdio> ...
- css3中变形与动画(三)
transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关.本文就介绍animation属性. anima ...
- MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)
在游戏中的交互过程中输入是一个必不可少的过程,比如登陆的时候需要用户输入用户名与密码,就算是单机游戏很多时候也要求用户输入一个用户名作为存档的依据.网络游戏中没有了输入,只用鼠标来交互是不切实际的,因 ...
- 2016-2017 CT S03E07: Codeforces Trainings Season 3 Episode 7 - HackerEarth Problems Compilation
B: 思路: 暴力,每两个判断一下; C: 思路: 容斥定理,先枚举脖子下面那个点和那个不可描述的点,算出所有的方案数,这里面有多的腿当成了脖子或者胳膊的,然后就再枚举这种情况把这些减去,又减多了; ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- [No00003F]richtextbox实现拖放
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { Initialize ...