11 2013 档案
摘要:poj 1741 http://poj.org/problem?id=1741题意:求树上距离小于k的点对的对数;分析:每条路经要么过根,要么不过根,对于不过根的路径我们递归同理可以求出,对于过根的路径,我们dfs一遍记录下所有其他节点到跟的距离,然后sort()一下可以o(n)求出其小于k的pair,但我们要减去其中来自同一子树的pair;利用重心分治,最多logn次,所有时间o(n * logn * logn);重心的定义:去掉该点后,其子树节点个数的最大值最小;step1:对于当前树,找到其重心,统计pair;step2:把重心当根,分别递归其子树;findsz(),findC()为求重
阅读全文
摘要:学了一下怎么写递归,发现确实比较简单;dp[pos][][]对应dfs()中的参数的状态,记忆化当前状态的值,不用考虑这个状态表示什么意思;然后就是设计好dfs()中的参数;hdu 3555http://acm.hdu.edu.cn/showproblem.php?pid=3555题意:统计1~n之间含有49的数字的个数;需要记录当前位置,前一位置放了那个数字,当前是否已经包含49,是否有上界;dfs(pos,pre,istrue,limit); 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace .
阅读全文
摘要:有一个trick就是没想到,枚举第二段时间后,要检测该火车能否继续跑一圈来判断,不能先检测前半圈能不能跑加进去后在检测后半段;// **** 部分不能放在那个位置;最近代码导致的错误总是找不出,贴下代码权当提醒吧!! 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int us[180000];10 int ID[180000];11 vector pr[5100];12 int ti[5100];13 int n;14 void FIND
阅读全文
摘要:读通题意应该要往二进制的方向去想,因为牌的个数是(1 a ^ b = c这样我们这样比较所得到的c是否相同就可以了; 1 import java.util.*; 2 import java.math.*; 3 import java.io.*; 4 5 public class Main { 6 public static void main(String[] arg) { 7 Solve t = new Solve(); 8 t.main(); 9 }10 }11 class Solve{12 int n;13 BigInte...
阅读全文