摘要:
给定一棵有N个点的树,所有节点的权值都为0。 有K次操作,每次指定两个点s,t,将s到t路径上所有点的权值都加一。 请输出K次操作完毕后权值最大的那个点的权值。 很裸的一道题,树剖+查分 将val[x]+1,val[y]+1,val[lca]-1,val[fa[lca]]-1 最后统计就好了。 #i 阅读全文
摘要:
可持久化真是个神奇的东西,(当然一开始并未想到可以这样用) 每个数建一个trie,前缀xor和来求,b[i]为1~i的异或和,求b[p]^b[n]^x的最大值,用sum确认结点是否存在。然后贪心求xor最大值。写的时候把a[i]向后移一位。 1 /************************** 阅读全文
摘要:
在经过一些列SB操作后,终于是搞懂了~~ 启发式搜索就我个人感觉而言是一种剪枝..如何巧妙的利用估价函数是最大的问题(嗯,之前一直觉得是一个很难想的东西,做了几道题后发现其实还好) 然后就是与迭代相结合了~~整体思路并没有多大变化(却因为自己的智障错误而调了半天,GG) 在进行每次搜索时先预估一下, 阅读全文
摘要:
这道题noip之前就在写了,但是奈何自己太弱了,对于dp的感觉不是特别~~♂。(偷偷瞄了一眼题解,绝对没有第二眼) 这道题是区间dp无疑,预处理连续的颜色一样的,f[i][j]表示区间i到区间j消去的最小代价方程:f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]) 然后要特 阅读全文
摘要:
一道MLE的DP,我们设f[i][j][x][y]表示一共i个人j个男生,男生比女生多x个,女生比男生多y个。递推 如果x+1<k,f[i+1,j+1,x+1,max(y-1,0)]+=f[i][j][x][y] 如果y+1<k,f[i+1,j,max(x-1,0),y+1]+=f[i][j][x] 阅读全文
摘要:
堆+贪心(优先队列) 我们先按t2升序排一遍,对于每栋建筑如果可以抢修就修,如果不能就看它是否比之前最大的更优,如果更优,就替换。 #include <stdio.h> #include <algorithm> #include <cstring> #include <cmath> #include 阅读全文
摘要:
#include <stdio.h> #include <algorithm> #include <cstring> #include <cmath> #define inf 100000000 using namespace std; const int maxn=100000+10; int n 阅读全文
摘要:
貌似是最大势 见cdq论文《弦图与区间图》 #include <stdio.h> #include <algorithm> #include <cstring> #include <cmath> #include <queue> #include <vector> using namespace s 阅读全文
摘要:
根据题意打好标记后跑spfa,然后dp #include <stdio.h> #include <algorithm> #include <cstring> #include <cmath> #include <queue> #include <vector> using namespace std 阅读全文
摘要:
题意:给你一个长度为n的字符串,每次你可以消去一段连续的回文子串,剩下的两端重新拼接成一个新的串,问最少需要消去多少次。 思路:这题一开始想不出,不好dp,一个明显的思路是用dp[i][j]表示消去i到j段最少要的次数,但是不知道每次消去后剩下的串的回文串情况,所以我们要换一个思路。其实题目中的回文 阅读全文