考慮乙個非法直徑,如果將所有距離小於該直徑的點連邊(上下界縮為乙個點),那麼一定存在一條路徑聯通上下界。
所以用類似kruskal的做法,先將這些邊排序,然後從小到大加邊,如果加到一條邊使得上下界聯通,那麼邊權即為答案。
#includeusing namespace std;
const int maxn=510;
const int maxm=1e5+10;
int n,cnt;
double l;
double x[maxn],y[maxn];
int fa[maxn];
struct edge
void add(int x,int y,double z)
int find(int x)
double dis(int a,int b,int c,int d)
int main()
for(int i=0;i<=n+1;++i)
fa[i]=i;
sort(edge,edge+cnt+1);
for(int i=1;i<=cnt;++i)
} return 0;
}
noip模擬 心《並查集》
背景描述 不是一切深淵都是滅亡 不是一切滅亡都覆蓋在弱者的頭上 這也是一切 舒婷 有n個透明的盒子,每個盒子裡面有兩個不同顏色的球,總共有m種顏色。alice和bob又在玩遊戲,具體的,alice會從n個盒子裡面選出若干個,bob再從alice選出的盒子裡面選出一些 不能不選 如果在bob選出的盒子...
並查集,帶權並查集
題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...
並查集和帶權並查集
並查集是乙個很高效演算法,理解起來也很簡單,寫起來更簡單。fat i i 找到乙個點的祖先 int findfat int x 二中的方法肯定不好,因為如果資料比較極端,那麼並查集就退化成乙個鏈了 如果加入了路徑壓縮,並查集這個演算法就更高效了。int findfat int x 遞迴寫法 int ...