資料結構 並查集 程式自動分析

2021-10-03 12:10:22 字數 1121 閱讀 4544

最近發現自己資料結構全部忘記基本,只能從頭再補,此題是一道典型的並查集+離散化的題目。

題目:程式自動分析

做法:離散化+並查集

1、因為注意到資料的取值範圍最大有 109

10^9

109,而又用到並查集來儲存節點,所以先要進行離散化。總共有 106

10^6

106 次詢問,因此最多也只會用到 2×1

06

2 \times10^6

2×10

6 個數字,陣列範圍可以滿足。同時這裡的離散化不需要滿足保序性,所以用 map

mapma

p 就可以完成。

2、這道題目的並查集是很典型的並查集。只需要先處理相等的情況,然後判斷不相等的情況會不會和原來衝突,衝突則有問題。

**

#include

#include

#include

#include

#include

using

namespace std;

const

int n=

1000010

;int p[n*2]

;int n,tot;

int t;

struct queryq[n]

;unordered_map<

int,

int> mp;

intget

(int x)

intfind

(int x)

intmain()

;}for(

int i=

1;i<=tot;i++

) p[i]

=i;for

(int i=

1;i<=n;i++

)bool flag=

false

;for

(int i=

1;i<=n;i++)}

if(flag) cout<<

"no"

"yes"

<}return0;

}

並查集 程式自動分析

原題鏈結 規模太大,先用離散化縮小。考慮所有相等條件,把所有相等的變數 進同乙個集合中。考慮所有不等條件,若兩個變數處於同一集合中,則證明無法同時滿足這兩個條件。實現 include define n 100000 10 using namespace std int n,m int a 2 n f...

並查集 程式自動分析

給你兩個邏輯關係,判斷是否有衝突 先將兩個邏輯分開來看,前乙個邏輯存在那麼後乙個邏輯一定不存在,如果存在那麼答案就錯誤了,可以用並查集維護,詳細見 define fre yes include include include const int n 1000005 struct message ar...

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...