5 6
3
求解無向圖的連通塊數目。並查集模板題。
最後統計合併後,有多少個不同的集合就可以。
#include #include #include using namespace std;
const int nmax=110;
int father[nmax];//存放父親節點
bool isroot[nmax]; //記錄某個節點是否作為某一集合的根節點
int findfather(int u)
} void union(int u,int v)
}void init(int n)
} int main(int argc, char** argv)
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)cout<
int ans=0;
for(int i=1;i<=n;i++)
printf("%d\n",ans);
} return 0;
}
並查集 好朋友
天勤書上一道題,很簡潔的展現了並查集的思想。大致意思是x和y是和朋友,xx和yy是好朋友.要你分組使組內都是好朋友,組外都不是好朋友。資料量比較小,很水,路徑壓縮不考慮也沒問題。includeusing namespace std define max 200 int father max bool...
求連通塊(並查集實現)
連通塊可以理解為無向圖中有幾個連通的點集,那麼這個過程與並查集的原理就極其相似了,將點集看作並查集的祖先和他的後代們,相互連通的點就放在同一祖先下,這樣只需要查詢共有幾個祖先即可。下面來一道例題深入理解下 jsoi2008 星球大戰 當我們加入乙個點時,先假設又加入乙個單獨的連通塊,然後再掃一下與它...
並查集(求朋友圈的個數)
有如下題目 已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另乙個朋友...