摘要:
参照《算法竞赛入门经典(第二版)》,这上面写得很清楚。 核心代码如下: 倒推十分巧妙。 阅读全文
摘要:
我们设$f[i][j]$表示在第$i$个节点时转播到$j$个用户的收益减费用的最大值。 现在找递推式: $f[i][j]=\max(f[i][j],f[son][k]+f[i][j k] w[i son]);$ 初始值如下$f[i][0]=0,f[leaf][1]=val[leaf]$ 根据这些我们 阅读全文
摘要:
所谓莫比乌斯反演,就是把好看的式子变得越来越猥琐(题外话) 开始变形: $$\sum\limits_{i=1}^n\sum\limits_{j=1}^mlca(i,j)$$ $$=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\frac{ij}{\gcd(i,j)}$$ 阅读全文
摘要:
本人第一道数论黑题,虽然有些参照题解,但是颇有收获。 首先可以将问题转化为求一下式子: $$\prod\limits_{k=1}^nf_k^{\sum\limits_{i=1}^n\mu(i)\left[\frac{n}{ik}\right]\left[\frac{m}{ik}\right]}$$ 阅读全文
摘要:
又是一个裸的费用流板子,不再赘述。 看代码: #include<bits/stdc++.h> using namespace std; #define int long long #define inf 1e12 const int maxn=1e5+10; int n,m,ans1,ans2; s 阅读全文
摘要:
难怪评蓝题,实在是太裸了。 源点向每个点连边,容量为这个点的现有货物数。 每个点向汇点连边,容量为要求即sum/n。 每个点向其相邻两点连边,容量无限,费用为1。 然后跑一遍源点到汇点的费用流。 看代码: #include<bits/stdc++.h> using namespace std; #d 阅读全文
摘要:
第一问裸的最大流。 第二问给每一条边加上容量无限,费用为输入的边,新建起点终点, 新起点连1,费用为0,容量为ans1+k,新终点同理。 然后跑一边费用流。大功告成! 看代码: #include<bits/stdc++.h> using namespace std; #define inf 1e9 阅读全文
摘要:
[NOI2006]不得不说远古的题还是比较水的。 这就是一个最大权闭合图的板子题,和拍照一模一样。 看代码: #include<bits/stdc++.h> using namespace std; const int maxn=5*1e5+10; int beg[maxn],nex[maxn],t 阅读全文
摘要:
有了线段树合并的基础后,很容易想到差分最后线段树合并。 这道题跟hdu上的relief grain是重题,然而我们老师却把那道题当做树剖的练手题给我们。 害得我想了好久…… 代码如下: #include<bits/stdc++.h> using namespace std; const int ma 阅读全文
摘要:
线段树合并用于解决一些需要将两颗线段树合并的题目 常见于一些子树处理的题目。 动态开点,记录左右子树。 不得不说,merge的代码像极了FHQtreap inline int merge(int a,int b,int x,int y){ if(!a)return b; if(!b)return a 阅读全文