2798. Query on a tree again! - #include <Seter> - using namespace Orz;

2798. Query on a tree again!

Seter posted @ 2011年8月10日 14:01 in SPOJ with tags DTP Partial SegTree Heap , 1857 阅读

http://www.spoj.pl/problems/QTREE3/

 

ID DATE USER PROBLEM RESULT TIME MEM LANG
5491666 2011-08-10 05:31:14 Seter Query on a tree again! 100 
edit  run
5.44 10M

C

 

ID DATE USER PROBLEM RESULT TIME MEM LANG
5488548 2011-08-09 15:21:47 Seter Query on a tree again! 100 
edit  run
6.16 11M

C

OrzNOI的神犇们……原来7k+是GYZ大神 - - 我果断被神犇们华丽BS了……RP掉光了啊……


在被Tim大神(Orz!!)虐了以后我下定必死的决心去写了轻重边树链剖分。一开始想写QTREE结果边权把我弄得晕头转向(我果然是苣蒻),所以只能去写写QTREE3……QTREE3由于有一个点是定点,所以不用LCA了,代码奇短无比,比块状树还短啊……

由于剖的题解太多了……我就说几个trick罢……

1.所有的线段树(或者其他什么东西)保存在一个数组里,给每个点记录一个数据结构的起始位置就可以了。

2.DFS只需要一遍就可以了……第一部分求LCA||找重链,第二部分对轻链边的孩子们循环构链

3.建超级根

4.变量名尽量定义得规则一点……避免2掉

5.不能1Y就对拍去!!!线段树那个我没对拍调了六小时才发现BUG(对某个点下的每条轻链都要把初始位置调零……我画的树是颗二叉树于是我就二叉了)。堆那个我没对拍又调了一晚上(8个0……昨天晚上果然脑子进浆糊了),今天早上和线段树那个拍了拍半小时就找到问题了(删点的时候要更新a与d我只更新了a……)

就这样罢……贴我的2X代码……线段树的那个加了getint只有35行……堆的45行,主要是sink与float太长了唉。我看了看最快的代码5.05s……看来我的剖还是挺快的!

By Seter

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee