圖論-并查集

并查集(Union-find Sets)是一種非常精巧而實用的數據結構,它主要用于處理一些不相交集合的合并問題.一些常見的用途有求連通子圖,求最小生成樹Kruskal算法和最近公共祖先(LCA)等.

并查集的基本操作主要有:

.1.初始化

2.查詢find

3.合并union

?

一般我們都會采用路徑壓縮 這樣效率更加高 ?

?

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define MAXN 20001
int fa[MAXN];
void init(int n) {for (int i = 1; i <= n; i++) {fa[i] = i;}//初始化
}
int find(int x) {if (x == fa[x]) {return x;}else {fa[x] = find(fa[x]);//路徑壓縮 也就是一直找到祖先return fa[x];}
}
void unionn(int i, int j) {int i_fa = find(i);//找到i的祖先int j_fa = find(j);//找到j的祖先fa[i_fa] = j_fa;//i的祖先指向j的祖先 反過來也可以
}
int main() {int n, m, x, y, q;scanf("%d", &n);init(n);scanf("%d", &m);for (int i = 1; i <= m; i++) {scanf("%d%d", &x, &y);unionn(x, y);}scanf("%d", &q);for (int i = 1; i <= q; i++) {scanf("%d%d", &x, &y);if (find(x) == find(y)) {printf("Yes\n");}else {printf("No\n");}}return 0;
}

或者這樣寫?

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N = 20010;int n, m;
int p[N];
int find(int x) {if (p[x] != x)p[x] = find(p[x]);return p[x];
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) p[i] = i;while (m--) {int a, b;scanf("%d%d", &a, &b);p[find(a)] = find(b);//合并 a->b}scanf("%d,&m");while (m--) {int a, b;scanf("%d%d", &a, &b);if (find(a) == find(b))puts("yes");else puts("no");}return 0;}

?

#include<iostream>
using namespace std;const int N = 10010;int n, m;
int p[N];int find(int x) {if (p[x] != x)p[x] = find(p[x]);return p[x];
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) p[i] = i;char op[2];//讀入操作的字符串  因為字符串后面有'\0'所以要存多一位while (m--) {int a, b;scanf("%s%d%d",&op ,&a, &b);if(*op=='M')p[find(a)] = find(b);//合并else {if (find(a) == find(b)) {puts("Yes");}else {puts("No");}}}return 0;
}

#include<iostream>
using namespace std;
const int N = 10010;int n, m;
int p[N], s[N];int find(int x) {if (p[x] != x)p[x] = find(p[x]);return p[x];
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) p[i] = i, s[i] = 1;while (m--){char op[3];int a, b;scanf("%s", &op);if (*op == 'C') {scanf("%d%d", &a, &b);a = find(a), b = find(b);if (a != b) {//如果相等證明他們在同一個祖先中s[b] += s[a];p[a] = b;}else if (*op == 'Q1') {scanf("%d%d", &a, &b);if (find(a) == find(b)) {puts("Yes\n");}else {puts("No\n");}}else {scanf("%d", &a);printf("%d\n", s[find(a)]);}}}return 0;
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210234.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git標簽的管理與思考

git 標簽管理 git 如何打標簽呢&#xff1f; 標簽是什么? 標簽 相當于一個 版本管理的一個貼紙&#xff0c;隨時 可以通過標簽 切換到 這個版本的狀態 &#xff0c; 有人可能有疑問 git commit 就可以知道 代碼的改動了&#xff0c; 為啥還需要標簽來管理呢&#xff1f; …

從二分類到多分類:探索Logistic回歸到Softmax回歸的演進

隨著機器學習和深度學習的迅猛發展&#xff0c;我們需要越來越靈活和強大的模型來解決各種不同的問題。在分類問題中&#xff0c;Logistic回歸一直是一個常見而有效的工具&#xff0c;尤其是在二分類場景中。然而&#xff0c;隨著問題變得更加復雜&#xff0c;我們需要更先進的…

node筆記

文章目錄 一、Node.js基礎1. 認識Node.js01 nodejs的特性02 使用 Node.js 需要了解多少 JavaScript03 瀏覽器環境vs node環境 2. 開發環境搭建3. 模塊、包、commonJS02 CommonJS規范03 modules模塊化規范寫法 4. Npm&Yarn01 npm的使用02 全局安裝 nrm03 yarn使用 5. 內置模…

在idea中使用maven創建dynamic web project

1、先創建一個empty project 2、添加一個module , 核心是選擇maven archetype webapp, 這個是maven提供的創建web工程的模版。 3、添加完等自動安裝好即可 4、目錄可能不完整 右鍵src---->點擊New---->點擊Directory &#xff08;注意&#xff1a;這是筆者所缺失的結…

每日一道c語言

任務描述 題目描述:輸入10個互不相同的整數并保存在數組中&#xff0c;找到該最大元素并刪除它&#xff0c;輸出刪除后的數組 相關知識&#xff08;略&#xff09; 編程要求 請仔細閱讀右側代碼&#xff0c;結合相關知識&#xff0c;在Begin-End區域內進行代碼補充&#xf…

ooTD I 女兒是自己的,盡情打扮盡情可愛

分享女寶的時尚穿搭 奶乎乎的黃色也太好看了 超足充絨量&#xff0b;優質面料 柔軟蓬松上身體驗感超贊 怎么穿都好看系列 輕輕松松打造時尚造型&#xff01;&#xff01;

Linux 刪除文件名亂碼的文件

現象&#xff1a; 處理&#xff1a; 1.>ls -li 獲取文件對應的ID號 2.把刪除指定文件&#xff08;ID號 &#xff09;執行&#xff1a; find ./ -inum 268648910 -exec rm {} \;

詳解Keras3.0 Models API: Whole model saving loading

1、save方法 Model.save(filepath, overwriteTrue, **kwargs) 將模型另存為.keras文件 參數說明 filepath: 保存模型的路徑。必須以.keras結尾overwrite&#xff1a;布爾值&#xff0c;表示是否覆蓋已存在的文件。默認為 True&#xff0c;即覆蓋已存在的文件。save_format…

微信小程序_介紹

開發準備 注冊微信小程序 進入微信公眾平臺 點擊立即注冊&#xff0c;選擇小程序&#xff0c;前往注冊 完善個人/企業信息 獲取AppID 進入小程序頁面->開發->開發設置->AppID 下載微信開發者工具 微信官方下載下載微信開發者工具穩定版 創建項目 綁定AppID不使用…

用Rust刷LeetCode之27 移除元素

27. 移除元素 難度: 簡單 原描述: 新描述: func removeElement(nums []int, val int) int { for i : 0; i < len(nums); i { if nums[i] val { nums append(nums[:i], nums[i1:]...) i-- } } return len(nums)} Rust 版本 下面這種寫法編譯無法通過: pub fn remove_…

基于ssm平面設計課程在線學習平臺系統源碼和論文

idea 數據庫mysql5.7 數據庫鏈接工具&#xff1a;navcat,小海豚等 隨著信息化時代的到來&#xff0c;管理系統都趨向于智能化、系統化&#xff0c;平面設計課程在線學習平臺系統也不例外&#xff0c;但目前國內的市場仍都使用人工管理&#xff0c;市場規模越來越大&#xff0c;…

【ArcGIS微課1000例】0079:ArcGIS Earth根據經緯坐標生成點shapefile

本文以氣象臺站數據的生成為例,詳細介紹ArcGIS Earth中導入X、Y經緯度坐標,生成Shapefile點數據的流程。 文章目錄 一、氣象臺站分布二、添加經緯度坐標三、符號化設置四、另存為一、氣象臺站分布 根據氣象臺站的經緯度坐標,可以很方便的在各種GIS平臺上生成點,并保存為多…

智能優化算法應用:基于蜣螂算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于蜣螂算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于蜣螂算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.蜣螂算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

STM32基礎教程 p16 窗口看門狗(WWDG)

1 窗口看門狗工作原理 1.1 簡介 WWDG簡介 窗口看門狗通常被用來監測&#xff0c;由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運 行序列而產生的軟件故障。除非遞減計數器的值在T6位變成0前被刷新&#xff0c;看門狗電路在達到預置 的時間周期時&#xff0c;會產…

定位分析RCU stall問題

使用RCU_CPU_STALL_CPUTIME 在編譯內核時打開CONFIG_RCU_CPU_STALL_CPUTIMEy或者在啟動參數中增加 rcupdate.rcu_cpu_stall_cputime1, 這樣在發生RCU STALL告警時就會有下面附加信息: rcu: hardirqs softirqs csw/systemrcu: number: 624 45 …

聯合基于信息論的安全和隱蔽通信的框架

這個標題很帥 abstractintroductionsystem modelPROPOSED JOINT OPTIMIZATION OF ITS AND COVERT TRANSMISSION RATE信息論安全 (ITS)隱蔽通信需要(CC)Joint Information-Theoretic Secrecy and Covert Communication in the Presence of an Untrusted User and Warden 202…

ffmpeg編解碼——時間基(time base)概念

文章目錄 FFmpeg 編解碼——時間基&#xff08;Time Base&#xff09;概念1. 時間基&#xff08;Time Base&#xff09;概念1.1 定義與作用1.2 表現形式 2. 時間基在FFmpeg中的應用2.1 時間戳2.2 持續時間 3. 理解FFmpeg中的時間基轉換3.1 av_rescale_q 函數3.2 av_rescale_q_r…

Shell數組函數:數組——數組和循環(四)

使用數組統計&#xff0c;用戶shell的類型和數量 一、腳本編輯 [root192 ~]# vim shell.sh #!/bin/bash declare -A shells while read ii dotypeecho $ii | awk -F: {print $7}let shells[$type] done < /etc/passwdfor i in ${!shells[]} doecho "$i: ${shells[$i]…

多任務學習(Multi-Task Learning)和遷移學習(Transfer Learning)的詳細解釋以及區別(系列1)

文章目錄 前言一、多任務學習&#xff08;Multi-Task Learning&#xff09;是什么&#xff1f;二、多任務學習&#xff08;Multi-Task Learning&#xff09;對數據的要求三、遷移學習是什么&#xff1f;四&#xff0c;遷移學習對數據的要求五&#xff0c;多任務學習與遷移學習的…

DevOps - Spug 自動化運維平臺

關于Spug Spug&#xff1a;麻雀&#xff0c;麻雀雖小&#xff0c;五臟俱全。 Spug是面向中小型企業設計的輕量級無Agent的自動化運維平臺&#xff0c;整合了主機管理、主機批量執行、主機在線終端、文件在線上傳下載、應用發布部署、在線任務計劃、配置中心、監控、報警等一系…