KM演算法板子

2021-07-04 16:01:54 字數 907 閱讀 5915

//原題hdu2255

/*其實在求最大 最小的時候只要用乙個模板就行了,把邊的權值去相反數即可得到另外乙個.求結果的時候再去相反數即可*/

/*最大最小有一些地方不同。。*/

#include #include#include#include//赤裸裸的模板啊。。

const int maxn = 301;

const int inf = (1<<31)-1;

int w[maxn][maxn];

int lx[maxn],ly[maxn]; //頂標

int linky[maxn];

int visx[maxn],visy[maxn];

int slack[maxn];

int n;

bool find(int x)

}else if(slack[y] > t)

slack[y] = t;

}return false; //沒有找到增廣軌(說明頂點x沒有對應的匹配,與完備匹配(相等子圖的完備匹配)不符)

}int km() //返回最優匹配的值

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

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

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

int result = 0;

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

if(linky[i]>-1)

result += w[linky[i]][i];

return result;

}int main()

printf("%d\n",km());

}return 0;

}

匈牙利演算法 KM演算法

匈牙利演算法 求最大匹配,那麼我們希望每乙個在左邊的點都盡量找到右邊的乙個點和它匹配。我們依次列舉左邊的點x的所有出邊指向的點y,若y之前沒有被匹配,那麼 x,y 就是一對合法的匹配,我們將匹配數加一,否則我們試圖給原來匹配y的x 重新找乙個匹配,如果x 匹配成功,那麼 x,y 就可以新增為一對合法...

匈牙利演算法,KM演算法

bool find int x return false 主程式 for i 1 i n i include include include include include include include include include include include include include...

KM演算法模板

這是hdu2255 include include include include includeusing namespace std const int maxn 305 const int inf 0x3f3f3f3f int love maxn maxn 記錄每個妹子和每個男生的好感度 in...