日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

九度OJ 朋友圈 并查集

發(fā)布時間:2025/6/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九度OJ 朋友圈 并查集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述:

假如已知有n個人和m對好友關(guān)系(存于數(shù)字r)。如果兩個人是直接或間接的好友(好友的好友的好友...),則認(rèn)為他們屬于同一個朋友圈,請寫程序求出這n個人里一共有多少個朋友圈。
假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1、2、3屬于一個朋友圈,4、5屬于另一個朋友圈,結(jié)果為2個朋友圈。

輸入:

輸入包含多個測試用例,每個測試用例的第一行包含兩個正整數(shù) n、m,1=<n,m<=100000。接下來有m行,每行分別輸入兩個人的編號f,t(1=<f,t<=n),表示f和t是好友。 當(dāng)n為0時,輸入結(jié)束,該用例不被處理。

輸出:

對應(yīng)每個測試用例,輸出在這n個人里一共有多少個朋友圈。

樣例輸入:
5 3 1 2 2 3 4 5 3 3 1 2 1 3 2 3 0
樣例輸出:
2 1


#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 100000 int father[N]; void init(int n) {int i;for (i = 1; i <= n; i++)father[i] = i; } int getFather(int v) {if (father[v] == v)return v;else {father[v] = getFather(father[v]);return father[v];} } void merge(int x, int y) {int fx = getFather(x);int fy = getFather(y);if (fx < fy)father[fx] = fy;elsefather[fy] = fx; } int same(int x, int y) {return getFather(x) == getFather(y); } int main(int argc, char **argv) {int n, m;int a, b;int i;int sum;while (scanf("%d%d", &n, &m) != EOF) {if (n == 0)break;init(n);sum = 0;for (i = 1; i <= m; i++) {scanf("%d%d", &a, &b);merge(a, b);}for (i = 1; i <= n; i++) {if (getFather(i) == i)sum++;}printf("%d\n", sum);}return 0; }


總結(jié)

以上是生活随笔為你收集整理的九度OJ 朋友圈 并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。