NOI2015程式自動分析 並查集

2021-10-17 03:18:19 字數 1108 閱讀 1209

在實現程式自動分析的過程中,常常需要判定一些約束條件是否能被同時滿足。

考慮乙個約束滿足問題的簡化版本:假設 x1,x2,x3,… 代表程式**現的變數,給定 n 個形如 xi=xj 或 xi≠xj 的變數相等/不等的約束條件,請判定是否可以分別為每乙個變數賦予恰當的值,使得上述所有約束條件同時被滿足。例如,乙個問題中的約束條件為:x1=x2,x2=x3,x3=x4,x1≠x4,這些約束條件顯然是不可能同時被滿足的,因此這個問題應判定為不可被滿足。

現在給出一些約束滿足問題,請分別對它們進行判定。

1≤n≤1000001≤i,j≤1000000000

題解:考慮用並查集,若xi,xj相同,就用並查集連起來,判斷哪些不同的,如果xi!=xj但是兩者屬於同一集合,就不行。由於i,j很大所以要用到離散化。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e6+10;

int cas,n1,n2,n,m;

struct nodea[n][2

];ll b[n]

;int fa[n]

;int

getfa

(int x)

intmain()

else

}sort

(b+1

,b+m+1)

;int h=

unique

(b+1

,b+m+1)

-(b+1)

;for

(int i=

1;i<=h;i++

) fa[i]

=i;for

(int i=

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

bool flag=1;

for(

int i=

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

if(flag)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

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

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

NOI 2015 程式自動分析

description 在實現程式自動分析的過程中,常常需要判定一些約束條件是否能被同時滿足。考慮乙個約束滿足問題的簡化版本 假設x1,x2,x3,代表程式中出現的變數,給定n個形如xi xj或xi xj的變數相等 不等的約束條件,請判定是否可以分別為每乙個變數賦予恰當的值,使得上述所有約束條件同時...

NOI 2015 程式自動分析

我覺得是noi史上最簡單的題目了,沒有之一。我們把相等的變數合併起來,然後最後在掃一遍不同的變數是否在乙個塊裡。可能變數很大,離散化一下。uojluogu bzoj cogs include include include using namespace std const int maxm 1e7...