20210908上午

20210908上午

大摆特摆!
请添加图片描述

T1T2T3T4T5T6T7T8
预测100100100100100100100100
一测60301001001080100100

T1:
树上操作,枚举每个点为根计算答案,复杂度 O ( n 2 ) O(n^2) O(n2)
显然有个 O ( n ) O(n) O(n)的换根dp,不多 O ( n 2 ) O(n^2) O(n2)都能过就不用写了。
死因:作死用1e4取 min ⁡ \min min,挂的妈都认不得。
T2:
先跑最短路,之后枚举每个点的每条边,若 d i s v = d i s u + v w dis_v=dis_u+v_w disv=disu+vw,说明 w w w这条边可以在最短路上,对每个点统计之后乘起来就行。因为图接近稠密图所以建议朴素dij(SPFA没被卡还是太善良了)。我想装逼手写配对堆整个 O ( n l o g n ) O(nlogn) O(nlogn),结果一步写错加空间开小把自己玩死了。

void change(int x,int v){
	val[x]=v;fa[x]=0;
	if(x==rt) pop();
	rt=(rt?x:merge(x,rt)); //应该是rt=(rt?merge(x,rt):rt)
	return;
}

请添加图片描述
T3:
最小生成树板子,考虑 k r u s k a l kruskal kruskal过程就能看出这俩没啥区别。
T4:
题目熟肉:给一棵树,统计所有非直接相连节点间的路径上的最小边权加一的和。
那么就需要知道每条边左右有多少点以此边作为最小边。
最小边? k r u s k a l kruskal kruskal不就是把边从小到大加的?每次两边的并查集大小似乎就是节点两边的点的集合?
成功发现正确算法,写一个带 s i z siz siz的并查集就行,每次合并的时候
a n s + = ( s i z i × s i z j − 1 ) × v i , j , f a j = i , s i z i + = s i z j ans+=(siz_i\times siz_j-1)\times v_{i,j},fa_j=i,siz_i+=siz_j ans+=(sizi×sizj1)×vi,j,faj=i,sizi+=sizj
T5:
可以来回走加有向图应该立刻想到强连通分量,所以先缩点并且记录强连通分量信息最高价格 m x i mx_i mxi和最低价格 m n i mn_i mni,建新图为一个 D a g Dag Dag,设计 f i f_i fi表示从 1 − i 1-i 1i的最小价格, a n s i ans_i ansi表示到 i i i的答案,可以得到 f v = min ⁡ u → v ( f u , m n v ) f_v=\min_{u\to v}(f_u,mn_v) fv=minuv(fu,mnv)
a n s v = max ⁡ ( max ⁡ u → v a n s u , m x v − f v ) ans_v=\max(\max_{u\to v}ans_u,mx_v-f_v) ansv=max(maxuvansu,mxvfv),拓扑转移就行。
死因:只转移了 f f f没转移 a n s ans ans,大家都看过来,我是____。
请添加图片描述

T6:
经典差分约束, f i > f j → f i ≥ f j + 1 f_i>f_j \to f_i \ge f_j+1 fi>fjfifj+1,把 f f f理解为 d i s dis dis可知是求最长路,建图拓扑就行,如果有拓扑没更新到的点说明成环,无解。
错因:装逼拓扑不直接进队建了个虚根,边数炸了。
请添加图片描述
T7:
。。。判断字母和##是否同时出现。。。非常傻逼的题。
T8:
打表找规律,把每次节点状态和叶节点输出来。
请添加图片描述
可以发现叶节点就是左边二进制转成数字之后,叶节点从左往右数的第几个,即 a n s i = l e f t i + 2 n − 1 ans_i=left_i+2^{n-1} ansi=lefti+2n1,而左边二进制每位数字也很有规律,他的从左往右数的第 i i i位就是 ( l > > i ) & 1 (l>>i)\And 1 (l>>i)&1的值。算一遍就行。

总结:我以后再也不装逼了。
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值