12 2021 档案
摘要:思路 拆点这种算法还是第一次见,不过能拿一点分还是可以接受吧。 主要就是说把点分为d[x][y], x表示某个点,y表示最后一次连续的小路长度。 这样对于一个d[x][y],如果它邻接的点对应的边是大路,那么就是d[u][0] = d[x][y] + w[i],否则就是d[u][y + w[i]]
阅读全文
摘要:思路 讲真的有限的东西直接暴力枚举就完事了,自己还是想太多了,这种题目应该是要拿下的。当时自己题目的意思也没理解,不应该。 代码 #include <iostream> #include <vector> using namespace std; int g[3][3]; int zeronum()
阅读全文
摘要:思路 典型的差分约束问题,只不过转化起来有点麻烦,注意转化的边界情况就行 代码 #include <iostream> #include <vector> #include <queue> #include <cstring> using namespace std; const int N = 3
阅读全文
摘要:思路 这道题是求最大值最小,所以很明显又是要用二分。自己没注意到是因为没有注意到所选边数小于等于n这个事,所以理解题意呀! 每次二分得到一个距离mid,如果能选不超过n条边,使得每条边的权值都小于mid,那么这个值就可以选。 由于这里只涉及边的个数,所以所有边的权都变成1了,所以用bfs+松弛操作就
阅读全文
摘要:思路: 这道题就是一个单点更新,区间查询的问题,所以用树状数组就行了。不过说实话,自己对第四第五题的态度需要改变一下。暴力可以,但是应该看到是运行超时,而不是错误。如果运行超时看下有没有极端情况可以跳过优化一下,不要想着暴力完了就完事了。 代码: #include <iostream> using
阅读全文
摘要:思路: 应该要将题目进行转化,转化为平时可以理解的形式。这里就是说求所有这样的点,其他点要么可以访问他,要么可以被他访问到,也就是说用两种边,一种是正向的,一种是反向的,然后dfs就行了。 代码: #include <iostream> #include <vector> #include <alg
阅读全文

浙公网安备 33010602011771号