11.21 IOI赛制练习赛

万年唯一一次 IOI 赛制

赛时

等带榜

大概 \(15min\) 有人 A 了 T1

于是开 T1

很容易想到操作是诈骗,\(A,B\) 随便放即可

于是考虑 \(A,B\) 之间连边

然后判断一下用过的是否小于联通块大小

然鹅码的并查集一直不过,并且有人过了 T6

然后就先放那了

开 T6,容易发现可以倒着找操作

跑个拓排即可

然鹅交上去 WA 了,他说我一个点不能操作两次(雾)

然后改改又 WA 了

瞪眼法找到是 check() 错了:

fd(i,1,m) if(vis[i]) return 0;
else return 1;

else 删掉即可

然后回去看 T1

换了种方法去写,过了

于是看 T7

发现如果这条边删掉后不影响最短路,那么取 \(\min\) 即可

否则正常求

然后码完交上去,发现对了一半,然鹅因为可恶的 \(\text{Subtask}\),就 \(0\) 分了

去吃饭,想 T7,想到有一个特殊性质可以按我的写

回来迅速把代码改改,交上去有 \(20\)

然后删每条边时暴力跑最短路,又有 \(10\)

所以拿到了 \(30\) 分,然后感觉应该不会有人再写题睡觉了

赛后

T7 很妙啊,是建最短路树

如果这个边不在最短路树上,那么直接取 \(\min\),否则暴力跑,复杂度 \(O(n^2\log n)\)

为什么复杂度正确?

因为在最短路树上的边最多有 \(n-1\) 条,所以只会跑 \(n\) 次,然后 \(n\le 200,\),并且只需要保留最短边和次短边,卡卡常就过了

总结

最短路树的性质还需要更深刻的理解

posted @ 2024-11-22 19:03  whrwlx  阅读(2)  评论(0编辑  收藏  举报