[USACO20JAN] Wormhole Sort S - 洛谷
算法:并查集+二分答案
难度:普及+/提高
首先我们可以发现一个性质:
当我们知道用几个虫洞进行排序的时候,我们也会知道
(1)她们用来排序的虫洞宽度的最小值;
(2)那些位置是可以相互到达的。
在这条性质的基础上,我们想到了二分答案。
接下来,就是二分答案的条件。
只要判断在开通这些虫洞的情况下,位置i与p_i是否可以相互到达,所以使用并查集。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100010
int n,m,pos[N],fa[N];
struct Node
{
int a,b,w;
}e[N];
bool cmp (Node p,Node q)
{
return p.w>q.w;
}
int read ()
{
int s=0,k=1;char c=getchar ();
while (!isdigit (c