题解区大多是两种做法,一种是 LCT,一种是 SPFA。
LCT 已经被考纲踢出 NOI 了,所以我就去了解了一下 SPFA 的做法。
大概是把边按照 a 排序以后,把 b 作为边权,每次只把新加入的边的端点放进队列里进行 SPFA。
有几位老哥的题解里复杂度分析的听上去很有道理。。。
于是我设想,如果图是一张类似菊花的东西,那每次都会把花心放进队列,而扩展花心难道不是很慢的吗?
于是我就造了一组菊花的数据,把题解里所有 SPFA 的做法和部分 LCT 的做法测试了一下,做了对比:
- xyz32768, LCT, (-O2)AC,0.112s
- Soulist, LCT, (-O2)AC,0.135s
- panda_2134, LCT, (-O2)AC,0.149s
- FlashHu, LCT, (-O2)AC,0.109s
- λᴉʍ, LCT, (-O2)AC,0.133s
可以看到 LCT 做法表现优秀
- xukuan, SPFA, (-O2)AC,4.971s, (-O0)AC,9.328s
- Qiuly, SPFA, (-O2)WA,1.615s, (-O0)AC,8.894s
- Refun(部分), SPFA, (-O2)AC,6.393s, (-O0)AC,9.128s
- Dispwnl, SPFA, (-O2)AC,5.324s, (-O0)AC,9.323s
- Zoewilly, SPFA, Pascal, 我不会编译!
- swift_zym, SPFA, (-O2)AC,5.052s, (-O0)AC,8.68s
- Imitatоrs, SPFA, (-O2)AC,12.175s, (-O0)AC,13.391s
而 SPFA 做法全部挂了……
请求加强数据,撤除部分题解 /kel