12 2018 档案
摘要:参考1:https://www.zhihu.com/question/27221568 参考2:https://blog.csdn.net/hzk_cpp/article/details/79275772 参考3:https://blog.csdn.net/BIT1120172185/article
阅读全文
摘要:D - Acute Triangles 思路: 极角排序+点积叉积 在一个三角形中,如果它是直角或者顿角三角形,那么直角和顿角只会出现一次 所以直角和顿角三角形的个数等于直角和顿角的个数 所以锐角三角形的个数等于三元组个数减去直角和顿角的个数 三点共线看成退化的顿角三角形 怎么算直角和顿角个数呢,
阅读全文
摘要:A - Tree Search 思路: 经典树形dp dp[i][0]表示i的子树中以i为端点的最大链 dp[i][1]表是整棵树中除去i的子树剩下的部分以i为端点的最大链 最后答案就是以i为端点的最大链和次大链拼起来(除了一些特殊情况,比如一条链更大,或者只有一条链) 代码:
阅读全文
摘要:B - Cactusophobia 思路: 点双联通分量+最大流 用tarjan求出每个点双联通分量 对于大小大于1的点双联通分量,它就是个环,那么源点和这个环相连, 容量为环的大小减一,这个环和环上的颜色连边,容量为一; 对于大小为1的点双连通分量,它只有一条边,那么源点和这个分量连边, 分量和边
阅读全文
摘要:D - Labyrinth 对于位置(i,j), j - c = R - L = const(常数), 其中R表示往右走了几步,L表示往左走了几步 所以R越大, L就越大, R越小, L就越小, 所以只需要最小化L和R中的其中一个就可以了 由于每次变化为0或1,所以用双端队列写bfs, 保证最前面的
阅读全文

浙公网安备 33010602011771号