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 ...
随机推荐
- HTTP状态码206和416
HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...
- MySQL创建数据库和表的Demo
Demo: 创建数据库的语法 1.基本语法 create database tour character set gbk; use tour; 无主键自增长的 create table EMB_T_E ...
- oracle11G使用DGbroker创建dg
1.环境: a.主机环境:centos6.5 b.软件环境:oracle 11.2.0.4 c.主机信息: DG1:192.168.100.51(数据库sid:atest) DG2:192.168.1 ...
- 金士顿U盘,群联PS2251-60主控,量产还原教程
还原成一个可移动磁盘教程,只是在"分区设置"中将 "模式=21" 改为 "模式=3" 即可. 1. 打开:"MPALL_F1_90 ...
- spring定时器(一)
使用的是spring的quartz功能,需导入com.springsource.org.quartz.jar包. 此定时器无法重置定时时间,需要的话可查看:spring定时器(二) spring的be ...
- net-snmp添加自定义MIB
我所知道的添加自定义MIB的方法有三种 1.静态加载,将生成的.c和.h文件加入到相应的位置,重新编译snmp库,优点是不需要修改配置文件,缺点是每次添加都得重新编译: 2.动态加载,将生成的.c ...
- IIS7 配合 vs2013内置 LocalDB使用
错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ...
- 报表开发工具中开放的部分图表js接口列表
1.. 描述 报表开发工具FineReport 8.0版本中开放了部分图表js接口,在具体应用的过程中很多人都不知道这些接口到底有什么作用,该怎么应用,所以根据我自己的应用在下面归纳了这些新开放js接 ...
- css3 background
background是一个很重要的css属性,在css3中新增了很多内容.一方面是原有属性新增了属性值,另一方面就是新增了3个属性. 一.css3中新增属性值介绍 css2的background有5个 ...
- BigDecimal.ROUND_HALF_XXX的各种用法
在银行.帐户.计费等领域,BigDecimal提供了精确的数值计算.其中8种舍入方式值得掌握. 1.ROUND_UP 舍入远离零的舍入模式. 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数 ...