原題鏈結
規模太大,先用離散化縮小。
①考慮所有相等條件,把所有相等的變數**進同乙個集合中。
②考慮所有不等條件,若兩個變數處於同一集合中,則證明無法同時滿足這兩個條件。
**實現:
#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...