並查集 程式自動分析

2021-10-05 17:14:00 字數 1012 閱讀 1493

原題鏈結

規模太大,先用離散化縮小。

①考慮所有相等條件,把所有相等的變數**進同乙個集合中。

②考慮所有不等條件,若兩個變數處於同一集合中,則證明無法同時滿足這兩個條件。

**實現:

#include

#define n 100000+10

using

namespace std;

int n,m;

int a[

2*n]

,fa[

2*n]

;int xi[n]

,xj[n]

;bool e[n]

;int

get(

int x)

intfind

(int x)

void

merge

(int x,

int y)

void

work()

sort

(a+1

,a+2

*n+1);

m=unique

(a+1

,a+2

*n+1)-

(a+1);

for(

int i=

1;i<=m;i++

)fa[i]

=i;for

(int i=

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

(e[i]

)merge

(find

(xi[i]),

find

(xj[i]))

;for

(int i=

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

(!e[i]

&&get

(find

(xi[i]))

==get

(find

(xj[i]))

)puts

("yes");

}int

main()

並查集 程式自動分析

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

NOI2015 程式自動分析(並查集)

傳送門 開始想錯了,寫了個種類並查集 結果發現可能會有很多個種類 便直接離線做 先把所有相等的mer ge merge merg e在一起 然後再處理不等的 如果有不等關係的在同乙個聯通塊中,顯然是不行的 不想離散化便直接上map mapma p了m ap mapma p 好啊 include in...

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

最近發現自己資料結構全部忘記基本,只能從頭再補,此題是一道典型的並查集 離散化的題目。題目 程式自動分析 做法 離散化 並查集 1 因為注意到資料的取值範圍最大有 109 10 9 109,而又用到並查集來儲存節點,所以先要進行離散化。總共有 106 10 6 106 次詢問,因此最多也只會用到 2...