POJ 3565 Ants 最小權匹配

2022-01-10 07:22:08 字數 1137 閱讀 1343

53題意:

白點,黑點各有n個,每對黑白點之間連乙個線段,問在保證線段不相交的情況下,應該怎麼連,使其距離和最小(距離為歐幾里德距離)輸出每個白點所對應的黑點編號。

思路:很明顯是二分圖最小權值匹配問題,由於km演算法求的是最大權值匹配,故要將權值取負,然後用 \(km\) 模板即可,最後結果再取反輸出

對於km演算法,我還是處於懵懂狀態,需要繼續理解。

#include#include#include#includeusing namespace std;

const int n = 105;

int a[n], b[n], c[n], d[n];

double w[n][n]; // 邊權

double la[n], lb[n]; // 左、右部點的頂標

bool va[n], vb[n]; // 訪問標記:是否在交錯樹中

int match[n], ans[n]; // 右部點匹配了哪乙個左部點

int n;

double upd[n], delta;

bool dfs(int x)

}else upd[y] = min(upd[y], la[x] + lb[y] - w[x][y]);

return false;

}void km()

for (int i = 1; i <= n; i++)

while (true)

}}int main()

貼乙個形象生動講km演算法的部落格:

POJ 3565 Ants(計算幾何,KM)

by cxlove 題目 給出一些螞蟻的點,給出一些樹的點,兩兩對應,使他們的連線不相交,輸出一種方案。可以任意假定一種組合,然後兩兩判斷,如果相交,則交換,直到全部不相交為止。這種思想很新穎,被稱為計算幾何中的調整思想。include include include include include...

poj 3308 最小點權覆蓋 最小割

思路 裸的最小點權覆蓋,建立超級源點和超級匯點,將源點與行相連,容量為這行消滅敵人的代價,將列與匯點相連,容量為這列消滅敵人的代價,對於每乙個敵人 x,y 連邊x y,容量為inf,這樣就說明選取的點覆蓋了那些邊 敵人 然後跑最大流求最小割即可。ps 這裡是乘積最小,要取對數轉化為和最小。1 inc...

poj 2125 最小點權覆蓋

題意描述 給你一張有向圖,每個點有兩個權值 w w w 表示刪掉該點的所有入邊所需要的花費,w 表示刪掉該點的所有出邊所需要的花費,問要刪除所有的點需要的最少花費為多少?分析 因為涉及到了點權和所有的邊那麼很容易想到最小點權覆蓋,但是這裡每個點有兩個權值怎麼處理呢?這樣建圖 將點拆成兩個點,每個點對...