The Sun Also Rises

Algorithm, Mathematica, 计算机科学, C++, photography, GNU/Linux的讨论空间

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  73 随笔 :: 6 文章 :: 169 评论 :: 0 Trackbacks
注:本文根据以前笔记整理而成,若有问题可以留言 or 询问我~

Finding Nemo

BFS,我用了SPFA

Searching the Web

模拟题,我用了一堆STL~~~

Argus

用个堆来维护一下就行了。


Fun Game

做的真辛苦@@@
厄,首先如果只有1个方向并且是形成链的话很容易想出O(2 ^ 16 * 16 * 16)的算法
2个方向的问题容易解决,同时考虑正向和反向,复杂度变为O(2 ^ 16 * 32 * 32)
关于链的问题,容易想到的方法是再加一维记录头,不过这样的复杂度好像有点大。
事实上,我们只要考察以第一种string为头的方案,然后最后再企图用最后一个和头合并一下就可以了。。。自己证。。。
然后就勉强AC了~~~

CODE



Square

根据Steiner Tree的结论可以得到
n == 1时是这种形状最优
\/
/\
n >= 2时是这种形状最优
\_/
/ \
然后枚举......
p.s. 求Steiner Tree的题:
Dhaka 2002 Hermes' Colony

Ural1460 Wires

Color a Tree

不错的题呢~
厄,首先如果没有限制,显然c的从大到小顺序就可以了。
类似的想法,我们先考察c最大的那个节点。
如果它没有father那么显然排在开头。
否则,它应当紧跟它的father(否则向前调整)
于是这两个节点可以合为一个。。。继续作。
注意k个节点合成一个后它的c用所有节点的平均数来算。。。(自己想)
似乎可以用heap + disjoint set做到O(nlogn),不过这么小的范围写O(n^2)也不错哈。。。:D

Kid's Problem

熟练搞出来一个模线性方程组。
Gauss消元的时候注意一点用类似于gcd的方法加来减去,这样保证方程组与原来同解。
最后再搜索就行了。。。(因为模的不一定是质数)
Gauss消元系列问题:
PKU1395 Cog-Wheels (最后需要搜索)
PKU2055
Kid's Problem (这两题如出一辙)
PKU2947 Widget Factory

URAL1561 Winnie the Pooh (非常推荐,上一题就是这道题的子问题啊~~~。。。)

CODE


The Separator in Grid

简单的读题题。好像从上往下BFS下就行了。

The Lost House

推荐啊。。。
首先是动态规划。
令suc[u] = 在以i为root的tree上找到house的sum of expect values
fail[u] = 在以i为root的tree上没有找到house的sum of expect values
fail[u]容易算,就是Sigma(2 + fail[v]), v是u的son.
suc[u]的算法嘛。。。假设我们知道访问它的sons的顺序是v[],于是计算流程如下:

int now = 0;
for (int i = 0; i < u_sons; ++i) {
    suc[u] += (now + 1) * leaf[v[i]] + suc[v[i]];
    now += 2 + fail[v[i]];
}

至于这个顺序怎么确定么,8!的搜索或者2 ^ 8 * 8的动态规划似乎都能过。
不过有一个很牛B的贪心。
对于某两个儿子v1, v2,我们现在要确定它的顺序。
则先v1的方案好于先v2的方案
<=> (now + 1) * leaf[v1] + suc[v1] + (now + 1 + 2 + fail[v2]) * leaf[v2] + suc[v2] <
    (now + 1) * leaf[v2] + suc[v2] + (now + 1 + 2 + fail[v1]) * leaf[v1] + suc[v1]
<=> (2 + fail[v1]) * leaf[v2] < (2 + fail[v2]) * leaf[v1]
嗯。。。然后。。。排序。。。复杂度O(n * log2k)。。。。。。。

详情参阅国家集训队 黄劲松 的论文。
posted on 2008-01-31 03:11 FreePeter 阅读(750) 评论(0)  编辑 收藏 引用 所属分类: ACM/ICPC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


Creative Commons License
This site is licensed under a Creative Commons Attribution-Share Alike 2.5 China Mainland License. 本站采用创作共用版权协议, 要求署名、相同方式共享. 转载本站内容必须也遵循“署名-相同方式共享”的创作共用协议. This site is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.