給出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 程式自動分析 並查集 離散
給出n 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,如果他們兩個的祖先是一樣的,也就是之前已...