【LOJ】#2079. 「JSOI2016」轻重路径】的更多相关文章

题解 写数据结构的时候我代码就会变得非常非常长 一看别人1.5K 2.3K 我6.3K-- orzzzzz 我们很容易想到离线倒着插入,然而,有个小锅叫如果size相同保持原来的重儿子不变 我们需要写个线段树,遇到两个size相同的儿子时看两个儿子下一次插入是什么时候,取下一次插入时间较大的儿子,如果都没有插入,取左儿子 最后类似lct一样用splay维护每条链,但是我们不用维护虚边,要支持给splay打标记,因为我们插入一个点要给整条链增加一遍size 代码 #include <bits/st…
题目链接 loj#2071. 「JSOI2016」最佳团体 题解 树形dp强行01分规 代码 #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define pc putchar inline int read() { int x = 0,f = 1; char c = gc; while(c < '0' || c > '9') c = gc; while…
目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的的概率降低 代码 #include<ctime> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define…
[LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\) 以内的激光塔内部的敌人的个数之和就是该发射源对答案的贡献. 用前缀和以及 \(Two Pointers\) 可以在 \(O(N)\) 的时间内统计一个发射源的贡献. 时间复杂度 \(O(N2LogN)\). 代码 #include <iostream> #include <cstdio&…
题面 传送门 题解 我们枚举一下发射源,并把敌人和激光塔按极角排序,那么一组合法解就是两个极角之差不超过\(\pi\)且中间有敌人的三元组数,预处理一下前缀和然后用双指针就行了 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int…
题面 传送门 题解 退火就好了 记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低 话虽如此然而我自己打的退火答案永远是\(0\)--只好抄了一发--但是完全看不出有什么区别啊-- //minamoto #include<bits/stdc++.h> #define R register #define rd ((.0+rand())/RAND_MAX) #define inline __inline__ __attribut…
目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就好了 代码 #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define pc putchar inline int read() { int x = 0,f = 1;…
Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你情不自禁的把周围每个建筑的编号都记了下来--但其实你没有真的记下来,而是把每个建筑的编号除以 \(2\) 取余数得到 \(0\) 或 \(1\),作为该建筑的标记,多个建筑物的标记连在一起形成一个 \(01\) 串. 你对这个串很感兴趣,尤其是对于这个串是回文串的情况,于是你决定研究这个问题. 学校…
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的路径,另一条是 \(lca\) 到 \(y\) 的路径.(对于 \(x, y\) 是 \(lca\) 的情况需要特殊考虑一下就行了) 这个求 \(lca\) 的过程用倍增实现就行了. 假设令到达时间为 \(at\) . 不难发现,在树上向上的路径满足 \(dep_u + at_u=d_1\) (深度…
题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 对于每个询问,只需要暴力合并两个线性基即可 每个点只会被加到logn个线性基里,所以总复杂度为O(nlogn60 + q60*2) 然后我写了句memset(b,0,sizeof 0)...被卡了1h... 代码 #include<cstdio> #include<vector> #…