摘要:
给出一张无向带权图,找一条从s到t的路径使经过的边权值乘积最小。 N,M<=1e5 weight<=1e4 直接dij的话len会达到1e4^1e5。 但是如果将边权向这样取个对数 VP = weightP1 × weightP2 × ... × weightPK ln VP = ln weight 阅读全文
摘要:
高斯消元 其实高斯消元有两种写法,这里是精度更高,代码更短的高斯.约旦做法。 思路就是每次选择一个未知数x,选择一个x的系数不为0的方程,用这个方程消去其他方程的未知数x的系数。每个未知数都做一次,最后就剩下n个只有一个未知数的方程(ax=b)。 #include<bits/stdc++.h> us 阅读全文
摘要:
几度欲写,却望高精而却步,今习得__int128,君子报仇,一年不晚。 NOIP2020 排水系统 DAG图,拓扑就好,核心难点在于毒瘤的分数的操作,毕竟只是T!只有分数相加,就很简单了。 a/b + x/y = (ay+bx)/by 约分 a/=gcd(a,b) b/gcd(a,b) 本来到这里就 阅读全文
摘要:
void tarjan(int now) { s.push(now); in[now]=1; dfn[now]=low[now]=++tot;///注意low也要赋初值 for(int i=head[now];i;i=nxt[i]) { if(in[to[i]]) low[now]=min(low[ 阅读全文
摘要:
题外话:可能很多人的知道主席树,但就没人好奇为什么叫主席树吗?发明者缩写HJT,所以就叫主席树了。 主席树 解决区间第k大,以及需要查找历史数据的区间问题。 例题 以下为区间第k大问题的主席树解法。 先离散化。 对于求[1,n]区间的问题,只需要建一棵值域平衡树,维护在原数组中有多少个数在当前值域, 阅读全文
摘要:
P1278 单词游戏 一道比较基础的状压题,看到题解很多人都打的记搜,小蒟蒻来发个状压dp。 由于不能多次使用同一个单词,对于每个单词只有0(不选)1(选)两种情况,并且n只有16显然是状压了。 预处理 对于每个单词我们只关心首尾和长度,所以就记下每个单词的首尾和长度。 设计状态 这题最简单的点就是 阅读全文
摘要:
有若干人每个人有两个条件必须且只能满足其中之一,还有一些额外要求如A号人的1条件和B号人的2条件至少要满足一个,找一个方案。 使用2-SAT算法。 对于每个额外条件如A号人的1条件和B号人的2条件至少要满足一个,反面理解为若A号人的2条件不满足则B号人的2条件必须满足和若B号人的1条件不满足则A号人 阅读全文
摘要:
int read() { char c;c=getchar(); int f=1,n=0; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){n=(n<<3)+(n<<1)+(c^48),c=getchar( 阅读全文
摘要:
关于 __int128 不会有人像我一样只打了一个_爆零吧 是__int128不是_int128!!! 介绍 __int128在g++里是过不了编译的所以要调试用了__int128的代码建议直接用luogu的IDE。 __int128顾名思义是一个范围能达到-2^127-1~2^127-1的整型变量 阅读全文
摘要:
树形dp空间优化 介绍 有时题目会告诉我们n叉树的最大层数,或者给出一个完全n叉树树,直接做树形dp会爆空间时,就可以用这个优化方法。 多数树形dp都是先dfs到子树,再合并到根上,显然当合并到根上时子树的信息没有意义了,这就浪费了空间。 举个例子: 一般的解法会用f[i(1~5)] 但在合并到2后 阅读全文