摘要:
分情况讨论,m=1的时候比较简单,设f[i][j]为到i选了j个矩形,前缀和转移一下就行了 m=2,设f[i][j][k]为1行前i个,2行前j个,一共选了k个,i!=j的时候各自转移同m=1,否则转移一下两行矩阵的情况 cpp include include using namespace std 阅读全文
摘要:
注意是等于s不是大于s dfs,用set或者map存这条链到root的点权和sum[u],更新答案的时候查一下有没有s sum[u]即可 cpp include include include using namespace std; const int N=500005; int n,m,a[N] 阅读全文
摘要:
首先注意 先hash一下,双hash,然后枚举删去位置,把hash值排个序,把些相等的加起来统计一下对数即可 cpp include include include using namespace std; const int N=30005; int ans,n,m,k; long long h1 阅读全文
摘要:
因为边权为1所以a直接bfs瞎搞就行……我一开始竟然写了个spfa cpp include include include include using namespace std; const int N=1005,inf=1e9; int n,m,st,ed,h[N],cnt,a[N][N],b[ 阅读全文
摘要:
dfs会T,只好正反两遍拓扑了…… cpp include include include include using namespace std; const int N=100005; int n,m,h[N],cnt,d1[N],d2[N]; double f[N],p[N],s[N],ans 阅读全文
摘要:
![](https://img2018.cnblogs.com/blog/1242898/201809/1242898-20180920174813398-1306255611.png) ```cpp #include #include #include using namespace std; const int N=1000005; int n,a[N],b[N]; long long m,... 阅读全文
摘要:
注意到目录是一颗树结构,然后就简单了,预以1为根的处理出dis[u]为以这个点为根,到子树内的目录总长,si为子树内叶子数 第二遍dfs换根即可 cpp include include include using namespace std; const int N=100005; int n,h[ 阅读全文
摘要:
注意到k=gcd(x,y) 1,所以答案是 $$ 2 (\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j)) n m $$ 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n include using namespace std; const int N=100005; lon 阅读全文
摘要:
这居然是我第一次写线段树合并……所以我居然在合并的时候加点结果WAWAWAMLEMLEMLE……!ro的时候居然直接指到la就行…… 树上差分,每个点建一棵动态开点线段树,然后统计答案的时候合并即可 cpp include include include using namespace std; c 阅读全文
摘要:
Wall是个好东西,要不然我至死都看不出来我把(b[i]+b[j])写成了(b[i],b[j])…… 还是来自lyd的题解: (其实原来课件第一行式子写错了没有 1,然而我用sai手画了一个上去hhhh,板绘选手表示鼠绘真难) cpp include include include using na 阅读全文
摘要:
来自lyd课件 发现s和last(s),next(s)成树结构,然后把式子化简成kx+b的形式,做树形dp即可 cpp include include include using namespace std; int n,t,a[105]; double p,q; struct qwe { doub 阅读全文
摘要:
注意到sum_t比较小,所以设f[i][j]为选前i头牛,当前sum_t为j的最小sum_w值,转移是f[i][j]=min(f[i 1][j],f[i 1][j t[i]]+w[i]),然后i维用滚动数组优化即可 注意j include include using namespace std; c 阅读全文