分析:首先看到題目中有兩種關係,會想到帶權並查集,但發現並不適用,反而有點複雜,其次看了元素的範圍之後才發現這道題應該就是普通並查集,難點在於對元素進行離散化,使得元素大小縮小到下標可以表示的範圍。
#include#include#include#includeusing namespace std;
const int n = 1e7;
int f[n],b[n],cnt;
struct node
} a[n];
int find(int x)// 路徑壓縮
int main()
sort(b,b + cnt);
cnt = unique(b,b + cnt) - b;// 去除重複元素,返回末尾位址,注意要先排序
sort(a,a + n);// 按照e從大到小排序
// 離散化
for(int i = 0; i < n; i++)
int flag = 1;
for(int i = 0; i < n; i++) // 當e==0並且u和v在同一集合中
} if(flag) printf("yes\n");
else printf("no\n");
} return 0;
}
洛谷P1955 程式自動分析 並查集 離散
給出n nn個變數之間的關係 等或不等 求這些活能否全部是真話。思路 考慮並查集,先將讀入的排序,給出相等關係的在前,不等關係的在後。那麼對於所有相等的兩個變數,我們將它們化為同一集合。之後對於不相等的變數,我們看看這兩個變數是否在同一集合內,如果在同一集合內,說明這兩個變數是相等的,所以肯定不成立...
洛谷P1955 程式自動分析 並查集 離散
給出nn 個變數之間的關係 等或不等 求這些活能否全部是真話。思路 考慮並查集,先將讀入的排序,給出相等關係的在前,不等關係的在後。那麼對於所有相等的兩個變數,我們將它們化為同一集合。之後對於不相等的變數,我們看看這兩個變數是否在同一集合內,如果在同一集合內,說明這兩個變數是相等的,所以肯定不成立 ...
洛谷 P1955 NOI2015 程式自動分析
目錄 傳送門 首先看到這種沙雕範圍 109109 直接選擇離散化,然後貌似就是簡單直接的並查集了 我們先將相等關係的 x x y role presentation y y進行合併,然後看不相等關係中的 x x y role presentation y y,如果他們兩個的祖先是一樣的,也就是之前已...