钱柜网页版:虔诚的墓主人

钱柜网页版:虔诚的墓主人

因为现在树状数组存的是c[u[3]][K]?c[d[3]][K],

A 题

B:Mahmoud and Ehab and the bipartiteness
题意:黄金年代棵树,可以划分为二分图,然后询问那个二分图最大还可以够添多少条边。
思路:树已经交付,那么大家能够通过dfs总括出两个集结A,B,然后差别集合之间才大概现身边,已经有了n-1条边,结果为size(A)*size(B)-n-1,注意爆int。

解析:首先深表本磨芋对出题人的敬(bi)意(shi)。那道题大概丧尽天良,看完题后大脑一片空白,整个人都糟糕了,刚开首的思绪是什么样吗?暴力观念枚举每种墓碑,然后总计每一种墓碑的虔诚度,然后再来统计。可是看看数据范围吗?10^9*10^9的矩阵,最多才10^5个树,光枚举就早就晚点了,所以自然极其。(然而假诺考试真没思路笔者就那么搞了- -!)

题解:

因为那一个操作都以离线的操作,所以大家要是理解每一个操作被施行的次数就足以了。于是暴力差分搞上去就能够了。

遍历方法:
在dfs中,用 for(int i=head[u];i!=-1;i=next[i]) { }

题意:由于调那道题调的头昏脑涨,所以题意本人搜吧,懒得说。

轮廓题意:

七个操作

(1) id op 把id的位置+op

(2) id op 查询在【id,op】之间的具备的数的差

上叁遍打cf照旧广新岁前,又最早大学生新的旅程,cf依旧好好打打呢,究竟不占太多日子,升高基本功算法本事。此次只出了两题,并且速度偏慢。

上述就是首先个遍历进程。

大意题意:

给您多个N(1<=N<=300),然后给你一张N*N的表,表的第I行第J列表示从I这一个节点到J那些节点有一条长度为map[i,j]的边。

接下来再给您N个数,那么些数都是图中节点的序号,数据保障每一个节点的序号适逢其时都现身了1次,然后要你分别求出按梯次删除那N个点后的图中全数一点对的相距和。

C:Mahmoud and Ehab and the xor
题意:给集合中数的个数n,和聚合中全体值的按位异或值k,令你提交会集是还是不是留存,况兼进行举个例子,集合中的数紧跟于1e6,x,n小于1e5

咱俩得以看看,当时他与[3,1]中间是有3个点满足题意的。这大家就要把那八个点的值加到答案上(其实[3,1]时也许有那一个进度,只但是它与上贰个点紧挨着,所以不恐怕有解,被小编跳过了)而那个加的值应该是如何?

题解:

动用Freud的属性:最外层的巡回也便是把节点叁个四个参加图中,作为图中一些点对间路线的转账节点。

就此对于那道题大家只须要依据给出的删数顺序倒着来三个三个步向图中就足以了,每参预二个点就计算一回答案,计算答案时遍历整张图就足以了。

void add(int u,int v,int w)
{
for(int i=head[u];i!=-1;i=next[i])//判重
{
if(edge[i].to==v)
{
edge[i].w=min(edge[i].w,w);
return;
}
}
edge[cnt].w = w;
edge[cnt].to = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
开创时最初化只要将 size 定为 0 ,head 数组全部赋值为 -1
就可以,每加入一个结点,先记下该结点的 point 、 val 等新闻,再记录下 nxt
音讯,最终将 head 值改造,size ++ ;访谈有些根 a 时首先寻访 size 值等于
head [ a ] 的结点,即最终一个挂载上去的结点,然后依次拜谒 size
等于当前结点 nxt 值的结点,直到访谈到 i 等于 -1 甘休;

图中自个儿非常留了多少个空行,大家开采,2,4,7那三列并从未怎么卵用,完全能够去除掉,可是那么些删除是必得的,因为10^9的边长的矩形,大家只算此中10^5个点,光是内部存款和储蓄器就开不下,所以离散化一下列,也正是纵坐标是无庸置疑的。

# D 题 :

那道题做的时候在想经过计算每一个人的奇偶性来管理,但也没想出什么样可协会的法门能承保集结中的数都分裂的性质。

[3,1]其风度翩翩店并未换行,所以左++,右–,上下填到树状数组。

**

大要题意:

你有一个n*m大小的棋盘,n行,m列,行号列号都从1方始,行从上到下数到n,列从左到右数到m,棋盘的每一个格子能够是铅白或许青蓝。

当知足全体下述条件的时候,以为棋盘上冒出了叁个”Cave“:

1.留存二个线条[l,r] (1 <= l <= r <=
n),使得l,l+1,l+2,…,r那几个行都有且独有八个水晶色格子,其余行不设有粉色格子。

2.留存二个行号t (l <= t <= r),使得:

3.对于随便存在深栗色格子的行r,把那行的孔雀绿格子对应的列号和砂黄格子之间的列号参加一个会晤,
称之为S(r)。

4.任取t及t之上的三个有鲜蓝格子的行,令上方的行为u,下方的行d,则S(u)是S(d)的子集。

5.任取t及t之下的八个有青黑格子的行,令上方的行为u,下方的行为d,则S(d)是S(u)的子集。

6.您要出口有些许染色的方案,使得棋盘现身一个“Cave”,答案模1000000007。

题解

暂时未有,待日后补上。

题解思路:为了更加好地找寻分布方案,大家得以从小的始发枚举,当n=1时,S={X},当n=2时,且x不为0时,S={X,0},当x为0时,S明显是不设有的,当n为3时,大家能够恣意写出多数组合,但出于我们平日枚举都以在低位最初枚举的,所以咱们尽量把组合放到高位,幸免会集里冒出重复数字,由于1e5<=217<=218<=1e6,所以我们枚举的数与2^17与一下,大家得以用如此的咬合((1<<17)|X),(1<<17)|(1<<18卡塔尔国,1<<18)的三结合。当n>3时,大家枚举能够在1发端枚举,那样结果不会和最后八个数重复。

明天140142神犇意志力的给作者讲了差不离的笔触。

粗粗题意:

给您多少个N和三个K(1<=N<=50,
1<=K<=5000),然后是N个数Xi,表示有N个人,他们的体重为Xi,可是难题约束Xi只会等于50或100。

K代表壹只船的最大载重。

昨天的光景是那N个人在一条河的单方面,他们有一条船,求那N个人过河起码要多少代价(把船从单向划到另一方面算1次卡塔尔国和以起码代价过河的方案数对10^9+7取模后
的值。

题解:

设dis[x][y][boat]代表原本的岸边有x个体重为50的人,y个体重为100的人,有一条船在原来的彼岸(其实boat不是0正是1卡塔尔国,到告竣状态dis[0][0][0]的
最短间距。

从状态dis[0][0][0]始发做最短路,每一步代价为1,故使用BFS,转移的时候只须要当心船上至稀有壹个人,重量不要超过k就好了。

那么dis[][][]数组
求好了,从发轫状态dis[n1][n2][1]到最后状态的起码渡河次数就能够求出来了,个中n1代表原本有n1个体重为50的人,n2为本来用n2个体重为100的人。

下一场求次数,dp就足以了。

境况形似用dp[x][y][boat]意味着到达有些状态的方案,对于下叁个方案dp[i][j][!boat],
当且仅当dis[i][j][!boat] + 1 =
dis[x][钱柜777线上娱乐城,y][boat],船不为空,不超载时转移。

dp[i][j][!boat]+=dp[x][y][boat]
(能够运动的体重为50的人员要求活动的体重为50的人的方案数)
(能够活动的体重为100的人物须求活动的体重为100的人的方案数)
不过实在能够在求dis的时候平昔倒着把dp也算了……

储存: dfs
遍历用图来管理,日常建图能够用三种艺术,时间约束没那么紧的能够用vector来囤积,时间范围比较紧的就非得要用链式前向星。
上面首要回想链式前向星。
struct Edge
{
int next;//当前源点的下一条边
int to;//当前边的终极
int w;//当前面包车型地铁参数
}edge[n*2];
支援数组 head[]//每八个极端出发的早前边,早先化时赋值为-1.
memset(head,-1,sizeof(head))

接下来,到[1,3]本条点,那时候吗,这么些点又到了新的一排,所以左右的话应该重新维护一下,而上下呢?显明只是上–,下++。不过那个时候就要当心了。在对左右举办操作在此之前,当前的树状数组显著存的是[0,3]时候的值,所以大家要开展翻新。而怎么立异呢?

B 题

D,E,F代补

先明了树状数组在大旨是哪些展现的。

差相当的少题意:

给你M(1<=M<=10^5)种操作,每一个操作都会有独家的Li,Ri,Di(1<=Li,Ri<=n

1<=Di<=10^5),表示将数组A从A[Li]一直到A[Ri]这段间距都抬高Di。

A数组的尺寸为N(1<=N<=10^5) ,并有初值,输入中会给出A数组的初值。

下一场有K(1<=K<=10^5)个操作体系L,奇骏,表示奉行操作L~牧马人,最终标题要你输出
A数组最终的值。

A:Mahmoud and Ehab and the MEX
题意:给出二个非负集结S和三个数X,让你通过加数大概减数的主意使x成为参预S的蝇头数。
钱柜网页版,思路: 水,比x小的数多应该加上去,假设x在聚聚集,应该收缩。

接下来

# C 题

admin

网站地图xml地图