題解 程式自動分析

2022-02-23 21:03:45 字數 901 閱讀 4645

[p1955noi2015]程式自動分析

這篇題解不適合作為學習並查集的文章,適合深入理解它。

等號顯然具有傳遞性:

\[a=b

\\b=c

\\\rightarrow a=c

\]我們發現不等號不具有傳遞性

\[a\not =b

\\b\not = c

\\\rightarrow c \ \ ?\ \ a

\]但是發現在一種情況下具有傳遞性

\[a=b

\\b\not =c

\\\rightarrow a\not=c

\]那麼我們同樣是並查集,並查集維護元素的相等,然後每個節點套乙個\(set\),用來存這個不等於節點的節點是哪些,同時使用按秩合併和路徑壓縮,每次\(query\)的時候一邊把路徑壓縮一邊把\(set​\)的內容全部移動到當前的根上。

複雜度\(n\log n\)

#include using namespace std;    typedef long long ll;

namespace sol inline ll qr()

mapmp;

struct r r[200001];

inline int q(const int& x) temp = r[i].f, r[i].f = t, i = temp;

}return t;

}inline void j(int t1, int t2)

int main()

if(f) puts("yes");

else puts("no");

return 0;

}} // namespace sol

int main()

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...

並查集 程式自動分析

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