洛谷P1955 程式自動分析 並查集 離散

2021-08-25 10:56:12 字數 755 閱讀 9737

給出n

nn個變數之間的關係(等或不等),求這些活能否全部是真話。

##思路:

考慮並查集,先將讀入的排序,給出相等關係的在前,不等關係的在後。那麼對於所有相等的兩個變數,我們將它們化為同一集合。之後對於不相等的變數,我們看看這兩個變數是否在同一集合內,如果在同一集合內,說明這兩個變數是相等的,所以肯定不成立;否則成立,繼續往下。

但是這樣由於變數的名稱比較大,所以要離散之後再用並查集。

##**:

#include #include using namespace std;

int t,n,x,y,len,father[200011],b[200011];

struct nodea[200011];

bool cmp(node x,node y)

int find(int x)

int main()

stable_sort(b+1,b+1+n*2); //排序

len=unique(b+1,b+1+n*2)-b-1; //去重,返回最後陣列的長度

for (int i=1;i<=len;i++) father[i]=i;

for (int i=1;i<=n;i++)

stable_sort(a+1,a+1+n,cmp); //排序

for (int i=1;i<=n;i++)

if (i==n) printf("yes\n");

}}}

洛谷P1955 程式自動分析 並查集 離散

給出nn 個變數之間的關係 等或不等 求這些活能否全部是真話。思路 考慮並查集,先將讀入的排序,給出相等關係的在前,不等關係的在後。那麼對於所有相等的兩個變數,我們將它們化為同一集合。之後對於不相等的變數,我們看看這兩個變數是否在同一集合內,如果在同一集合內,說明這兩個變數是相等的,所以肯定不成立 ...

洛谷 P1955 程式自動分析(並查集 離散化)

分析 首先看到題目中有兩種關係,會想到帶權並查集,但發現並不適用,反而有點複雜,其次看了元素的範圍之後才發現這道題應該就是普通並查集,難點在於對元素進行離散化,使得元素大小縮小到下標可以表示的範圍。include include include includeusing namespace std ...

洛谷 P1955 NOI2015 程式自動分析

目錄 傳送門 首先看到這種沙雕範圍 109109 直接選擇離散化,然後貌似就是簡單直接的並查集了 我們先將相等關係的 x x y role presentation y y進行合併,然後看不相等關係中的 x x y role presentation y y,如果他們兩個的祖先是一樣的,也就是之前已...