BZOJ4643 卡常大水题 【Tarjan】】的更多相关文章

题目分析: 给所有边按A排序,依次加入再按B递增排序,势能分析可以发现是O(n^4)的 代码: #include<bits/stdc++.h> using namespace std; ; ; int n,cl,dfn[maxn],low[maxn]; struct edge{int u,v,w1,w2;}edges[maxm]; vector <int> g[maxn]; int cmp(edge alpha,edge beta){return alpha.w1 < bet…
将边按权值$A$从小到大排序,从小到大枚举$\max(A)$,然后双指针从大到小枚举$\max(B)$. 按权值$B$用大根堆维护所有已经加入的边,每次$\max(B)$减少时,不断取出权值$B$最大的边看看是否需要删除即可. 那么只需要检验这个图是否只有一个强连通分量. 考虑使用Kosaraju算法,维护一个未走过的点的集合,每次与出边表取交之后递归搜索可行后继点. 这显然可以用bitset来并行计算,时间复杂度单次$O(\frac{n^2}{32})$. 总时间复杂度$O(\frac{n^4…
卡了一晚上,经历了被卡空间,被卡T,被卡数组等一堆惨惨的事情之后,终于在各位大爹的帮助下过了这个题qwqqq (全网都没有用矩阵转移的动态dp,让我很慌张) 首先,我们先考虑一个比较基础的\(dp\) 我们令\(dp1[i]\)表示必须选\(i\)的最大连通块的权值是多少. 然后令\(ans1[i]\)表示\(i\)的子树中的\(dp1\)的最大值. 那么该怎么计算这两个数组呢. 首先$$dp1[i] = dp1[i]+max(0,dp1[p])$$ 其中\(p\)是\(i\)的儿子. \[an…
工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define A 6666666 #define mod 998244353 ll jie[A],ni[A],acnt[A],bcnt[A]; ll fheng[A],fshu[A]; ll n,m,a,b; ll meng(ll x,ll k){ ll ans=1; for(;k;k>>=1,x=x*x%m…
题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{i=1}^mb_i\) 的最小值.\(\lg n\leq 1.5\times 10^6\) 被 hb 叫来写这题的题解 u1s1 这题实在是太恐怖了,以下是我的全部非 AC 提交: 首先直接做肯定是不太容易的. 容易发现答案具有单调性,故可以二分答案,本题转化为一个判定性问题. 我们要求:和为 \(…
题目描述 $ρ$有一个二分连通无向图,$X$方点.$Y$方点均为$n$个(编号为$1\sim n$).这个二分图比较特殊,每一个$Y$方点的度为$2$,一条黑色边,一条白色边.所有黑色边权值均为$a$,所有白色边权值均为$b$.选择一个$X$方点,代价为连接的所有边的权值之和.激活一个$Y$方点,需要选择至少一个与之相邻的$X$方点.现在,$ρ$想激活每个$Y$方点,他想知道最小的总代价.不过$ρ$很善良,他给你开了$O2$优化.这样你就不会被卡常了.当然,除非你真的连读入优化都不想写,或者常数…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3286 题意概括 n,m,a,b,c,d,e,f<=10^1000000 题解 神奇的卡常题目. 在此感谢"zhouzixuan"——bzoj 3286: Fibonacci矩阵 学习他,才15秒卡过此题. 这题的做法应该很明显的,学过矩阵快速幂的大概几眼就看出来了. 对于每一行的转移,是相同的,所以矩阵快速幂可以搞定行与行之间的转移. 然后对于某一行,其实大部分的转移是和abc有…
一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人,对队员的队员的训练也是日常关心,他要求每周要有一位队员出一道题目.不知过了多少年,终于轮到Shiyiliang出题了,他费尽脑汁,终于出了一道大水题 给定一个偶数n,n的取值范围为[-1e18,1e18],要求一对整数x,y满足以下条件: 1.x*y==n 2.x与n必须同号,即如果n>0则x>0…
[luogu T71973]卡常者π酱 题意 给定一个长度为 \(n\) 的字符串, 要求将字符串分割为若干段, 每一段要么是一个字符要么是前面几段的并的子串. 如果某一段是一个单独字符, 则产生 \(a\) 的开销. 如果是前几段的并的子串, 则产生 \(b\) 的开销. 如果满足两个条件, 则可以在 \(a,b\) 中任选一个开销. 求划分的最小开销. \(n\le 5\times 10^6\), 字符集大小 \(\Sigma\le 7\). 题解 冷静分析一下发现是沙雕题 然而题目说不卡常…
妙啊算错时间复杂度了 题目大意:给你一棵$n$个节点的二叉树,每个节点要么是叶子节点,要么拥有恰好两个儿子. 令$m$为叶子节点个数,你需要在这棵二叉树中选择$i$个叶子节点染色,叶节点染色需要一定的代价,非叶子节点代价为两孩子的染色节点数量的异或和乘上一常数.请最小化代价. 数据范围:$n≤4000$. 显然这是一道$dp$题. 令$f[u][i]$表示在以$u$号点为根的子树中,选择$i$个叶子节点染色的最小代价. 若u为叶子节点,不难得出$f[u][0]=0$,$f[u][1]=c[u]$…