Source
AtCoder - 2159
https://vjudge.net/contest/147744#problem/A
My Solution
题意:分别有一个road网络和一个railway网络,求每个点在2个网络中都连通的点的个数。
并查集+二分
先用并查集维护出2个网络的连通关系,然后把这些树转移到 map<int, vector> mp里,
//bitset 超时
每次对于每个i,如果没有计算过ans,则比较mp1[_find(i)]和mp2[_find2(2)]这2个vector里相同的元素的个数,并且这些相同的数它们的ans都是一样的,
比如把这些相同元素维护到一个map<int, bool> m里,则所有的m.first的ans都是m.size,下次i遍历到这些点时可以直接continue。
直接比较2个vector时会超时,所有采用的优化方法是 在得到vector后直接对每一个vector进行排序,然后用a、b2个指针分别指向2个vector中的当前元素,不满足时用二分的方法找到指针需要指向的下一个元素的位置。
复杂度 O(nlogn)
#include
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
共有 0 条评论