樣板題幾乎沒必要分析,值得注意的是這道題需要先構建乙個01序列,再進行取模再輸出結果。這裡01序列的構建方法,可以用位運算簡單實現,事實上位運算左移一位等於原值乘以2,但是對這道題來講,寫左移顯然比乘以2更好理解,也有更高的效率。(詳見**)
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
8000050
;int fa[maxn]
,r[maxn]
;//r是並查集的秩(可以理解為深度)
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return ans*f;
}int
findst
(int x)
intpd
(int x,
int y)
void
uni(
int x,
int y)
}int anss;
//anss開始時候要麼定義在主函式外面,要麼就一定記得清零,第一次交這道題時就犯了這個低階錯誤,結果把樣例1讀進去之後直接輸出了乙個三位數
intmain()
else
}printf
("%d"
,anss)
;return0;
}
並查集的秩(也就是**中的r陣列)在這裡面起的作用:
上面的那個是用秩的,下面的沒有用秩。
並查集模板
來自lifeng wang http hi.baidu.com fandywang jlu 前輩06年寫的東西,追隨前人足跡繼續努力。並查集的一些題目和相關解題報告 poj 1611 the suspects 最基礎的並查集 poj 2524 ubiquitous religions 最基本的並查集...
並查集模板
普通並查集 define max size 100005 int pa max size 儲存有向圖的邊 void init 初始化 該函式可以根據具體情況儲存和初始化需要的內容 int findset int a 不帶路勁壓縮 return a void union nodes int a,int...
並查集模板
codevs 2597 團夥 題目描述 description 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...