- 博客(20)
- 收藏
- 关注
原创 此博客正式启用
原地址:http://www.cnblogs.com/Patrickpwq 把被咕咕咕的几篇补上了过后 以后就用csdn了 18.11.8
2018-11-08 22:24:31 182
原创 【POI2014】KUR-Couriers(主席树)
对于询问[i,j] 在[1..n]中我们看看小于mid的数字有多少个,显然如果个数的两倍<=j-i+1那么[1..mid]中就不存在这样的数, 反之检测大于mid有多少个 当然 如果两个都不行,就返回0 是可以递归的 #include<bits/stdc++.h> #define N 500005 using namespace std; int n,m,a[N],r...
2018-11-08 22:22:06 146
原创 【NOIP模拟】T1 发电机(递推逆元+期望)
期望是有线性性质的 考虑每个点的概率 由于一个点的子树放了后 它就不能再放了 换句话说 这个点是子树中第一个通电的 也就是说这个点的通电概率是1size[i]1size[i] 题目中又说了每个点的编号大于儿子们 于是就不用dfs了 只需递推即可 把所有点的概率相加 那还要求出逆元 这里提供一种逆元的线性递推方式 #include<bits/stdc++.h> #defi...
2018-11-08 22:21:14 132
原创 【USACO15JAN】草鉴定Grass Cownoisseur(缩点+分层图?)
蒟蒻好紧张啊 蒟蒻好紧张啊 蒟蒻好紧张啊 蒟蒻好紧张啊 一开始方向好像走错了 乱推了个拓扑的式子 然后FST了 然后还不肯放弃 挣扎了20分钟 又受到了刚上来都打完球了的ldx的diss "我靠,这么傻逼的题你还没A吗" 好吧的确是傻逼题 先缩点 设s是1所在的scc的编号 考虑逆行的使用姿势 对于一个可以从s出发到达的点 逆行到一个可以到达s的点 然后这个东西你...
2018-11-07 22:04:00 128
原创 【洛谷 P3398】仓鼠找sugar(lca)
听了教练的考前须知 蒟蒻紧张的要死 只想做信心题 同时满足:c或者d在x子树里 a或者b在y子树里 其中x=lca(a,b),y=lca(c,d) #include<bits/stdc++.h> #define N 100005 using namespace std; template<class T> inline void read(T &x) { ...
2018-11-06 14:45:00 129
原创 【ZJOJ2010】数字计数(数位DP)
设f[i][j][p]表示长度为i 最高位为j p出现的个数 显然 f[i][j][p]=sigma{f[i-1][k][p]} 其中k是次高位 但是最高位出现的那么多次都没有被我们算进去 但是很显然只需要加上(i-2)^10就阔以了 然后常规的分[1,b],[1,a-1]解决 常规的分成两部分 一部分最高位小于最高位(似乎有点怪怪的??) 另一部分就是剩下的 在这里只说下另一部分 算...
2018-11-06 11:57:00 199
原创 【USACO15DEC】最大流Max Flow(树上差分)
听了教练的考前须知 蒟蒻紧张的要死 只想做信心题 #include<bits/stdc++.h> #define N 50005 using namespace std; int n,k,tot,first[N]; struct Tree { int to,next; }edge[2*N]; inline void addedge(int x...
2018-11-06 10:30:00 150
原创 【洛谷11月月赛T3】【P4996】咕咕咕(组合数)
迟到的题解 昨天乱翻的时候感觉这道题挺有意思的 一眼看过去状态压缩乱搜 转移方程大概是 设f[i]表示从0转移到i的遗憾值之和 f[i]=sigma(f[j])+val[i]*dis[i] dis[i]=sigma(dis[j]) 其中j是i的子集,dis[i]表示从0转移到i的方案数之和 妙啊有70分了 // luogu-judger-enable-o2 // luogu-judger...
2018-11-06 09:56:00 191
原创 【BZOJ 4247】挂饰(背包变形)
虽然转移方程可以一眼看出 但是烦就烦在为何要排序 有人说这是一个贪心,又有人说这是一个保障正确性的。 就按照贪心的想法好了:在保证正确性的情况下尽量多的挂钩。 #include<bits/stdc++.h> #define N 2005 #define INF 0x3f3f3f3f using namespace std; int n,f[N][N];...
2018-11-05 22:10:00 136
原创 【NOIP 校内模拟】T3 忘了是啥名字了(dfs序+树状数组)
对于当前新加入的一条路径 他产生的贡献分为两种 1.另一条路径的LCA在当前路径上 2.当前路径的LCA在另一条上 对于情况1: 可以维护当前点到根节点有多少个LCA,查询只需查询u,v,-2*lca(u,v),修改需要对lca的子树+1 对于情况2: 显然的树上差分,查询就是lca子树的前缀和,修改u++,v++,lca-2 即开两个树状数组,一个支持单点查询+区间修改,一个支持单点修...
2018-11-05 20:30:00 140
原创 【NOIP 校内模拟】T2 规避(容斥+最短路计数)
可以先不管符合条件的 先统计出所有的可能走法(最短路条数*最短路条数) 然后减去会相遇的 会相遇的分为在点相遇和在边相遇 在点(设为p)相遇:先保证点在最短路上 然后从s到p的最短路等于从t到p的最短路 在边(设为(x,y,z))相遇:同样需要保证边在最短路上(需要判断三次 同样玄妙♂) 以及相遇的地方一定在边上(两条不同的最短路的两倍不超过总长 这个姿♂势可以记住) 挺玄妙的 #inc...
2018-11-05 16:50:00 116
原创 【NOIP 校内模拟】T1 line(带权并查集)
很无奈 离正解就差一句话 简单的带权并查集 没啥好说的 也可以差分约束 #include<bits/stdc++.h> #define N 100005 #define M 200005 #define D 10005 using namespace std; template<class T> inline void read(T &x) { x...
2018-11-05 13:58:00 124
原创 【NOIP 校内模拟】T1 优美的序列(二分+st表+卡常)
我是菜鸡 我是蒟蒻 我好菜 ak一定是区间最小的值,且是所有数(包括自己)的最大公约数 我没看出来 没救了 noip爆零了 回家养猪了 没学上了 怎么办 gcd有单调性 gcd有单调性 gcd有单调性 gcd有单调性 gcd有单调性 可以二分 可以二分 可以二分 可以二分 要说多少遍才记得到 我没想到 没救了 noip爆零了 回家养猪了 没学上了 怎么办 stl少用 stl少用 stl少...
2018-11-02 17:00:00 222
原创 【NOIP校内模拟】T2 飞越行星带(kruskal)
【NOIP校内模拟】T2 飞越行星带(kruskal) 啥玩意儿啊 题都没读懂 飞船要飞过这个行星带 就必须穿过每个行星形成的瓶颈 于是我们把每个行星想象成一个点 形成的瓶颈就是与其他点相连的边 相当于一个最小生成树了 直到s t联通 当然 这样做有点难理解 还可以类似的二分+并查集做 #include<bits/stdc++.h> #...
2018-11-02 15:48:00 100
原创 【NOIP 2017】逛公园(最短路+记忆化搜索)
肯定要先跑一次最短路 题目中的k 相当于允许我们走k距离的“冤枉路” 回想之前有些题是如何判断哪些边是属于最短路上的 当dis[now]+edge[u].val==dis[vis] 这条边就在最短路上 类似的 我们可以得出 dis[now]+edge[u].val-dis[vis]就是这一次走的“冤枉路”的长度 到这个地方搜索的策略已经很明显了 dfs(now,remain)表示当前当前...
2018-11-02 08:10:00 158
原创 【SDOI2009】Elaxia的路线(拓扑+最短路+dp)
先找出Elaxia的最短路 重新建图 在此图上我们再标记同时也是w**的最短路的边 显然这是一个DAG 可以做dp 设f[i]表示以i点结尾的最长公共连续和(公共路径一定是一条链) 则f[vis]=max(f[now],f[now]+e[u].val*e[u].flag)(flag表示是否也是w**的最短路) 为了使得没有后效性 需要在拓扑排序时做dp #include<iostr...
2018-11-01 20:48:00 131
原创 【BZOJ2750】【HAOI2012】道路(最短路+拓扑)
容易想到枚举所有起点 做最短路 然后枚举边统计次数 一条边(x,y)的贡献 肯定是 s到x最短路的方案数 乘上 s到其他点但经过了y的最短路 对于前者 每个点可以从前一个点递推过来 只要满足dis[vis]==dis[now]+edge[u].val 当一个点被所有入边都统计了一次后 就可以搜他了(拓扑思想) 对于后者 每个点从后一个点递推过来 #include&...
2018-11-01 16:09:00 242
原创 递增数列(迭代加深搜索)
迭代加深搜索就是限制递归的层数,然后一层层地扩大限制的层数 我们记录当前深度,以及当前应该搜出几个数 设计剪枝: 1.当当前深度乘上2^r(r是还没有选的数)比m还小 那肯定是不行的 因为最大的扩展方式就是选两个最大的数 2.这一层比上一层数小 #include<bits/stdc++.h> using namespace std; int m,ste...
2018-11-01 14:32:00 433
原创 【TYVJ1340】送礼物(折半搜索+hashmap)
当答案可以分为两半时 为了降低复杂度 可以使用折半搜索 对前半部分 搜出所有可能的和 用map记录 对后半部分 同样也是搜出可能的和 如果前半部分存在一个和 能拼起来 那ans++ #include<bits/stdc++.h> #define N 45 #define ll long long using namespace std; ll n,ke...
2018-11-01 13:36:00 219
原创 再数17(搜索+容斥)
n个集合的容斥其实就是 总的 减去两两相交的 加上三个相交 减去四个相交 加上五个.....(奇加偶减) 这道题就是一个lcm的容斥 我们用搜索来实现 枚举选的数 需要加个剪枝 当前lcm已经超过了m #include<bits/stdc++.h> #define N 35 #define int long long using namespace s...
2018-11-01 12:16:00 129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人