11.28 模拟赛
总结
T1 读完题就会了。感觉没什么坑直接写。10min 过大样例。没啥好拍的就不拍了。
T2。感觉不难啊,这种模拟 Kruskal 的题都做一堆了。想。
谔谔正解会不了一点。写个乱搞,看看能不能过大样例。
一开始是没过的,因为少写了一种情况。很久之后意识到改过来发现大样例过了!
然后没对拍。当时真不知道在想啥。
T3 什么玩意,样例解释怎么蹦出个
然而事实上 T3 的题面确实很脑瘫。赛后听 lhl 才终于理解题意。而且全机房就 lhl 读懂了题。。。。。而且 A 了。。。。。。。Orz Orz Orz
T4。不是有结论”与+或=和“吗。那么问题不久变成了从
想一想做法。
赶紧写。
然后样例没过。然后发现自己跟个小丑似的”与+或=和“跟着题一点关系没有。
还是只会
T2 做法肯定不是正解,但说不定能骗一堆分。先把保底
然后我还是小丑,
题解
A. 送信卒
注意到
B. 星际联邦
解法 1(题解做法)
考虑蓝莓(捷克语:Borůvka)算法。
它的思想很类似 Kruskal。Kruskal 一次操作会选择两个连通块合并,而蓝莓算法则是多个。
流程是这样的:
- 最开始图中有
个连通块。即没有边。 - 为每个点
找一条边 ,其中 和 不在同一个连通块内,且 最小。将这条边称为这个的 最小边。 - 将所有最小边的端点的两个连通块合并。答案加上这些最小边的边权。
- 若此时剩余连通块数量
,回到第二步。否则结束。
【模板】最小生成树 用蓝莓算法实现如下:
int n, m, p[N];
int best[N]; // 最小边
bool st[N];
struct Edge {
int a, b, c;
}e[N];
int fifa(int x) {
return x == p[x] ? x : p[x] = fifa(p[x]);
}
void merge(int a, int b) {
p[fifa(a)] = fifa(b);
}
bool cmp(int a, int b) {
if (!b) return true;
if (e[a].c != e[b].c) return e[a].c < e[b].c;
return a < b; // 如果边权相等,视作编号小的边更小。
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= m; ++ i ) {
cin >> e[i].a >> e[i].b >> e[i].c;
}
for (int i = 1; i <= n; ++ i ) {
p[i] = i;
}
int cnt = 0, res = 0;
bool flg = true;
while (flg) {
flg = false;
memset(best, 0, sizeof best);
for (int i = 1; i <= m; ++ i )
if (!st[i]) {
int a = fifa(e[i].a), b = fifa(e[i].b);
if (a == b) continue;
if (cmp(i, best[a])) best[a] = i;
if (cmp(i, best[b])) best[b] = i;
}
for (int i = 1; i <= n; ++ i )
if (best[i] && !st[best[i]]) {
flg = true;
cnt ++ ;
res += e[best[i]].c;
st[best[i]] = true;
merge(e[best[i]].a, e[best[i]].b);
}
}
if (cnt == n - 1) cout << res;
else cout << "orz";
}
复杂度为什么正确?因为一轮操作后图中连通块的数量至少减半。所以复杂度是
对于本题,发现一个点
但是最小边的定义里写明,两个端点不能在同一个连通块内。于是还需要维护前缀次小值和后缀次大值。这里的 次 表示不和最值连通块相同的最值。
解法 2(乱搞)
考虑对于每个
实测
C. 对称旅行者
考虑期望。
显然一次跳跃后,第
然后 P7962 [NOIP2021] 方差。求
那么第
为啥?
原本
。跳跃后 。 原本
。跳跃后 。
也就是说一轮操作
然后快速幂维护
最后前缀和。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端