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,\),并且只需要保留最短边和次短边,卡卡常就过了
总结
最短路树的性质还需要更深刻的理解
本文来自博客园,作者:whrwlx,转载请注明原文链接:https://www.cnblogs.com/whrwlx/p/18563493