摘要:
第一眼以为能用最大子段和 然后发现n很小,直接暴力 贪心取出最小加入最大即可。 #include<bits/stdc++.h> using namespace std; #define orz cout<<"lyakioi!!!!!!!!!!!!!!!!!"<<endl inline int r() 阅读全文
摘要:
神仙题,让我学会了NEW东西。 考虑到人实在太多了,不能直接把编号记录下来。我们可以使用 动 态 开 点 \(s\ p\ l\ a\ y\) 具体地,splay的每一个结点存储一段编号连续的区间,splay的内部根据排名排序。 每一次询问拆点即可。 实现稍(fei)微(chang)麻烦一些。 #in 阅读全文
摘要:
思考的突破口是最大的那个人连着的所有人都会死 进而我们可以想到一个人如果连着比他大的人那他就biss,因为比他大的人一定在他之后死,这条边就一直存在。 需要统计连着的比他大的人的数量,否则复杂度爆炸 #include<bits/stdc++.h> using namespace std; #defi 阅读全文
摘要:
二分答案。 考虑边肯定还是根据边权从小到大加入。 显然我们不能先加一堆白边。 但是我们可以通过白边的边权控制加入最小生成树的白边数量。 那么数量满足单调性可以二分。 #include<bits/stdc++.h> using namespace std; #define orz cout<<"lyt 阅读全文
摘要:
度限制最小生成树 就是01分数规划,裸的。 #include<bits/stdc++.h> using namespace std; #define orz cout<<"lytcltcltcltcltcltcl"<<endl inline int r(){int s=0,k=1;char c=ge 阅读全文
摘要:
度限制最小生成树。 先不加连跟的边,跑出其他的x个最小生成森林。 用最小代价的边链接根和森林,得到x度时的最小生成树。 如果度限制小于x,无解 如果度大于x,我们需要继续加链接根的边。 每一次枚举所有可能可以加入的边,找到加入后形成的环上不与根链接的边中最长的那一条删掉。在所有能加入的边中取最优的。 阅读全文