題目鏈結
略對於相等的關係很好維護,關鍵是對於不想等的關係。如果\(x_i\)與\(x_j\)不相等,那麼\(x_i\)所在集合中的所有點都是和\(x_j\)所在集合中的所有點不相等的。
把不相等的\(x_i\)與\(x_j\),所在集合的代表結點建一條邊,如果\(x_i\)所在集合要和其他集合合併,那麼在合併的時候指向被合併集合的邊都要指向合併的集合,反之,被合併集合指向其他集合的邊也要加進合併的集合裡頭。如果兩個合併的集合之間有邊,說明關係衝突。
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define endl '\n'
#define clr(arr,b) memset(arr, b, sizeof(arr))
#define ios ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairp;
typedef pairpll;
const double pi = acos(-1.0);
const double eps = 1e-8;
const ll mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+10;
const int maxm = 2e6+10;
struct e e[maxm]; int h[maxn], tot;
int l, p[maxn], num[maxn];
void add(int u, int v) ; h[u] = tot;
}int find(int x)
vectorans, tmp;
bool merge(int a, int b)
if (last)
return 0;
}void solve()
int main()
else
}cout << ans.size() << endl;
for (auto v : ans) printf("%d\n", v);
return 0;
}
hdu 6109 資料分割
acm.hdu.edu.cn showproblem.php?pid 6109 給出若干個條件 xi xj 或 xi xj 它們分屬若干組,但組與組之間的分隔符沒了,要重新分隔這幾組條件。每一組條件的特點是 不可能成立,但去掉最後乙個條件後,就可以成立。每次都貪心地常試將盡量多的條件放進當前這組,遇...
HDU3938 並查集 並查集
先按邊權值排個序,每次加入一條邊,用並查集,關鍵看懂題。include include include include using namespace std const int maxn 10010 int n,m,q struct edge edges maxn 5 inline int cmp...
hdu 拓撲排序 並查集
題目大意 有一些池塘,每乙個池塘都有乙個價值,現在想刪除一些池塘。有如下刪除條件 1 乙個池塘有兩個管道連線的不可以刪除。2 求最後剩下的為奇數環的池塘的價值。先用拓撲排序的思路將兩個一下連線的全刪除 只有用並查集統計數目 includeusing namespace std define ll l...