摘要:
题目是问把一棵树通过剪边、加边形成一个环的最小代价。分成两步,先把树剪成一些链,再把链连接成一个环。设一棵有n个节点的树,剪掉X条边后,形成L条链。那么代价为X+L。n-1-X=edgeNum(L条链) ① //原本有n-1条边,剪掉X条,还剩edgeNum(L条链)条edgeNum(L条链)+L=n ② //L条链的这些边+L条边形成一个有n条边的环由①、②得到,L=X+1则代价为 X+L=2*L-1=2*X+1。问题转化成了,把一棵树剪成一些链,最少能剪成几条链?或者,最少需要剪掉多少条边?我觉得到了这一步问题就好解决了,我是树形dp搞的,求的是最少能剪成几条链。dp[u][0]表示u节点 阅读全文
摘要:
这个题目看网上好多题解都是直接O(n*m)卡过。我是这么做的。对于m次操作,统计每个w的次数。然后对每个w做矩阵乘法。这样直接做矩阵乘法是会TLE的。又由于这里的矩阵很特殊,一次乘法可以降维成O(n^2)。--------------------------怎么降维的可以这样模拟下:a b c a b c a*a+2bc c*c+2ab b*b+2acc a b * c a b = b*b+2ac a*a+2bc c*c+2abb c a b c a c*c+2ab b*b+2ac a*a+2bc注意到原矩阵的每一行(除了第一行)都是上一行向右平移一个单位的结果,而相乘得到的矩阵也满足这个性质 阅读全文