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)的更多相关文章

  1. 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 ...

  2. 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 ...

  3. Codeforces Round #359 (Div. 1)

    A http://codeforces.com/contest/685/standings 题意:给你n和m,找出(a,b)的对数,其中a满足要求:0<=a<n,a的7进制的位数和n-1的 ...

  4. 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 ...

  5. Codeforces Round #359 (Div. 1) A. Robbers' watch 暴力

    A. Robbers' watch 题目连接: http://www.codeforces.com/contest/685/problem/A Description Robbers, who att ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #359 (Div. 2) C. Robbers' watch 搜索

    题目链接:http://codeforces.com/contest/686/problem/C题目大意:给你两个十进制的数n和m,选一个范围在[0,n)的整数a,选一个范围在[0,m)的整数b,要求 ...

  9. 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 ...

随机推荐

  1. Confluence自启动脚本

    由于confluence用rc.local是无法自启动的,所以这里附上confluence的启动脚本 将以下脚本拷贝到/etc/init.d/confluenced # cd /etc/init.d/ ...

  2. STM32的USART

    转载自:http://www.cnblogs.com/TrueElement/archive/2012/09/14/2684298.html 几个问题: 1.状态寄存器(USART_SR)中的TC(T ...

  3. PHPCMS如何开启手机站点

    现在手机端用户增长急速增长,看天猫今年双十一,有47%交易是移动端交易的,所以手机功能已逐渐替代电脑的功能,使用手机上网已经成为了互联网新的趋势,很多客户以及站长都希望手机能够访问自己的网站,那么今天 ...

  4. 浅谈输入输出”重定向“——基于Linux系统

    前言 进程在启动后会自动的打开3个文件:标准输入.标准输出和标准错误输出分别对应文件描述符0.1.2.对于每个进程他们都都维护了一张文件描述符表(file descriptor table),通常fd ...

  5. 让CKEditor支持FLV视频播放

    平时都是做C/S开发,最近需要维护一个协会门户网站. 文章编辑使用CKEditor 3.3.2 + ckfinder 2.0的方案.可是这种方案居然不支持FLV视频播放,度娘说以前的老版本是支持的,这 ...

  6. .NET对象的内存布局

    每个虚拟机都有它自己的对象布局,本文我们将针对sscli源码和windbg调试器来查看不同类型的.net对象布局. 在.net虚拟机里,每个对象都需要保存这些信息: 对象的类型: 对象实例的成员属性( ...

  7. 使用::before和::after来完成尖角效果

    一.目标 目标完成下图效果: 二.完成 1.分析 在::before和::after伪元素的用法一文中有说到使用::befrore和::after可以完成一个六边形.这个案例是用一个#star-six ...

  8. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  9. USACO1.5Superprime Rid[附带关于素数算法时间测试]

    题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组 ...

  10. Vector3 *2 ,ToString()自动四舍五入

    还以为出错了,仔细看发现ToString()自动四舍五入 Vector3 forward = Camera.main.transform.forward; Debug.Log("forwar ...