首页 > TAG信息列表 > Blo

「BZOJ1123」BLO 题解报告

题目描述 B城有n个城镇。m条双向道路。每条道路连接两个不同的城镇,没有重复的道路,所有城镇连通。 你需要输出n个数,第i个数表示删除结点i关联的边,不删去i结点,有多少个有序对(x,y),满足城镇x和城镇y不连通。 输入 输入n,m及m条边。n<=100000,m<=500000 输出 输出n个数,第i个数表示删除结

luogu P7446 [Ynoi2007] rfplca

https://www.luogu.com.cn/problem/P7446 有个地方写错了两次竟然还都过了 类似弹飞绵羊,维护从每个点第一次跳出当前块是跳到哪个节点,记为\(tt[i]\), 往前跳一次的记为\(to[i]\), 给整个块打标记的时候,如果存在一个点不能一次跳出当前块,就暴力把块重建一遍。因为每次至少往前跳一

数列分块解决区间更新+区间最值问题

题目大意: 给定一个大小为 \(n\) 的数列 \(a_1, a_2, \ldots, a_n\),你需要对这个数列进行 \(m\) 次操作,操作包含如下两种类型: 1 x y z :将区间 \([x,y]\) 范围内的所有元素更新为 \(z\)(即:\(a_x, a_{x+1}, \ldots, a_y\) 的值都将变为 \(z\)); 2 x y :查询区间 \([x,y]\) 范围内所有元

LOJ6284. 数列分块入门 8 题解

题目链接:https://loj.ac/p/6284 涉及操作: 区间查询某一个数 \(c\) 出现的次数; 区间更新。 解题思路: 一开始的思路是除了整块维护以外,再对每一个区间用一个 multiset 维护每一个数出现的次数。这样更新和查询一次的时间复杂度都会降到 \(O(\sqrt n \log n)\),总的时间复杂度是 \(O

LOJ6281. 数列分块入门 5 题解

题目链接:https://loj.ac/p/6281 涉及操作: 区间开方; 区间求和。 解题思路: 主要思路:\(2^{32}\) 次方内的数最多开 \(7\) 次方都会变成 \(1\)。 用 \(tag_i\) 表示第 \(i\) 个分块的整体开方次数,则 \(tag_i \ge 7\) 时这个分块中的所有元素都为 \(1\)。 示例程序: #include <bits/st

[POI2008]BLO-Blockade

P3469 [POI2008]BLO-Blockade 题意: 有一个连通的有向图,求出删除一个点后,不能连通的点对的个数 (\((x,y),(y,x)\) 算两对) 分析: 很明显,既然涉及到环类求点集的题目,很明显是 \(tarjan\) 。 有一个性质: 从一个点集到另一个点集,形成的点对个数(相反算两对) 是:\(2 \times size[x]*size[

P3469 [POI2008]BLO-Blockade 题解

题目大意 P3469 [POI2008]BLO-Blockade 给出一张无向图,要求输出分别删除某个点相连的边后,无向图中有多少个有序点对满足\(x\)和\(y\)不连通 问题求解 删掉一个点是否连通,自然而然就想到了割点,如果这个点是割点,那么删掉边后其他\(n-1\)的点都是连通的,由于是有序点对,所以这个点的答

「arc113E」Rvom and Rsrev 题解

题意 \(~~~~\) 有一个仅由 a 和 b 组成的字符串 \(s\)。每次可以选择两个位置分别为 \(l,r\) 且 \(s_l = s_r\) 并将 \(s[l \cdots r]\) 一段翻转后删除 \(s_l,s_r\)。问经过最多无限次操作可以操作出来的字典序最大的字符串是什么。 题解 大力分类讨论题,恶心心。 \(\sf 1\) 若

BZOJ1123 BLO Tarjan

题目描述:一个国家有n个城镇,m条双向道路,n<=1e5,m<=5e5,没有自环和重边。所有城镇联通。现在你需要给出n个答案,第i个答案表示当你去掉结点i的所有关联边后,整个图上有多少个点对(u,v)满足u,v不连通?   思路:若某个结点u在图上不是割点的话,相当于只有u与其他结点断开了联系。所以答案为2*(

[学习笔记]数列分块入门九题[LOJ6277-6285]

Thoughts 打完这九题,感觉脱了一层皮,各种或毒瘤或傻逼的错误,很难只交一次便通过。如果不看题解把这九题打完,不仅分块有所进步,调代码细节的能力也会提升。 做完这九题,让我感觉到分块算法本身思维难度不大,主要是代码的细节问题。而要想用分块解决一个问题,最终要的是找到每个块到底存

P3469 [POI2008]BLO-Blockade

P3469 题解 题意 给出一张有\(n\)个点,\(m\)条边的无向连通图,问对于每个节点\(i\),去掉与\(i\)相连的所有边后,有多少对有序点对\((x,y)\)不再连通。 分析 根据割点的定义可知,若\(i\)不为割点,则只有剩下的\(n-1\)对点不与\(i\)联通,答案为\(2(n-1)\)。 若\(i\)为割点,则原图一定被分为

E - Holes

题目链接:http://codeforces.com/problemset/problem/13/E Little Petya likes to play a lot. Most of all he likes to play a game «Holes». This is a game for one person with following rules: There are N holes located in a single row and numbered from left to ri

LOJ #6283. 数列分块入门 7

区间加,区间乘,单点查询。 跟线段树的差不多,为了避免精度问题要先乘再加。区别也和其他的差不多,残块暴力。然后就没什么了。scanf读int要& ! 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 const int mod = 10007; 7

LOJ #6278. 数列分块入门 2

hzwer tql! 渐渐找到了分块的套路。 给出一个长为  n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 c*c 的元素个数。 残块先在原数组上暴力,然后拿原数组更新块数组(效率高于结构体存id!),整块就标记。 code: 1 #include<iostream> 2 #include<cmath> 3 #include<cs

1011-广告

T1 堆优化,枚举删除数量贪心。 #include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <queue>#define N 1111111#define LL long longusing namespace std;struct BLO{ LL x,y; int id; friend bool operator < (const

hwzer分块九讲

1.区间加法,单点查询 #include<bits/stdc++.h>using namespace std;int n,opt,m,a[50005],vc,x,y,tg[50005],blo,tag[50005];int read(){ long long x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar(

高精度

From kuangbin 支持加法,乘法,int char*对 BigInt 初始化 struct BigInt { const static int mod=1e4; const static int blo=4; int a[600], len; BigInt() { mst(a, 0), len=1; } BigInt(int v) { mst(a, 0); len=0; do

Bounce 弹飞绵羊 --- 分块/LCT/动态树

https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分块( √ ) LCT() 动态树() 一、分块: 分块重要的是确定我们建立的数组要完成什么使命,这题是问从某点弹出序列需要几次,并要提供修改操作。既然分了块,那我们就要把操作缩小到块的范围,需要的是弹出整个序列的次数,我们就缩小到跳出这

$bzoj1123-POI2008\ BLO\ tarjan$

题面描述 \(Byteotia\)城市有\(n\)个\(towns\),\(m\)条双向\(roads\). 每条\(road\)连接 两个不同的\(towns\),没有重复的\(road\). 所有\(towns\)连通。 输入格式 输入\(n\leq 10^5,m\leq 5*10^5\)及\(m\)条边 输出格式 输出\(n\)个数,代表如果把第\(i\)个点去掉,将有多少对点

GukiZ and GukiZiana CodeForces - 551E (分块)

大意: 区间加, 查询整个序列元素$x$的最远间隔.   时限很大, 无脑$O(n\sqrt{n}logn)$分块. #include <iostream>#include <sstream>#include <algorithm>#include <cstdio>#include <math.h>#include <set>#include <map>#include <queue>#include &l

BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 typedef long long ll; 7 const int maxn = 1e5 + 5; 8 const int maxm = 5e5 + 5; 9 int dfn[maxn], low[maxn], head[maxn];10 ll ans[maxn], siz[maxn];1

【洛谷P3469】BLO

题目大意:给定 N 个点,M 条边的联通无向图,求出对于每个点来说,将与这个点相连的所有边都去掉后,会少多少个联通的点对 (x,y)。 题解:连通性问题从 DFS 树的角度进行考虑。对于 DFS 树当前的节点来说,若其子节点的 low[] 大于等于子树根节点的时间戳,则将该节点的边去掉后,以该子树的孩子节

bzoj1123:[POI2008]BLO

传送门 提示:被删掉的点也要算点对,\((i,j)\)和\((j,i)\)是不同的点对 显然找出割点就行了,记下size,对于各子树统计一下答案 代码: #include<cstdio> #include<iostream> #include<algorithm> using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getcha

第十四分块(前体)(二次离线莫队)

把离线区间逆序对的代码魔改一下就过了 \(QAQ\) 不过这里 \(pre,suf\) 两个数组可以在询问中求出,不需要提前求出。 此题不卡常,好评、 \(Code\ Below:\) // luogu-judger-enable-o2 #include <bits/stdc++.h> #define ll long long #define lowbit(x) ((x)&(-(x))) using namespace

[POI2008]BLO-Blockade

题目传送门 题意:给定一张无向图,求每个点被封锁之后有多少个有序点对$(x,y)(x!=y,1<=x,y<=n)$满足$x$无法到达$y$。 题目强调了所有村庄都相互可达。 首先会想到割顶,因为如果删去割顶,就会导致图的连通块增加。反之不变。 不是割顶答案就应该是$(n-1)*2$。因为连通块没有增加意味着除