km演算法求的是完備匹配下的最大權匹配,是hungary演算法的進一步,因為hungary演算法是最大匹配的演算法,不帶權。
經典演算法,想不出來的了,要參考別人的。然後消化吸收吧。因為真的很複雜的演算法。
牽涉到很多什麼增廣路,交錯樹之類的,名詞,術語,變數就一大堆。心浮氣躁可不能學這樣的演算法了,要心平氣和,深呼吸,然後慢慢消化才行。
這個部落格分析挺詳細的,且帶圖:
兩個部落格一樣的圖,也不知道誰抄誰的了。
我下面演算法是稍微修改一點而成的程式。
主要是slack可以不使用陣列記錄,只需要記錄當前的得到的最小值就可以了。
#include #include #include #include using namespace std;
const int max_n = 301;
int n;
int link[max_n];//右邊到左邊的連線
int slack;//當前dfs中,訪問了的點中可以讓利的最小限度
bool visleft[max_n], visright[max_n];
int curmaxval[max_n], giveawayval[max_n];
int gra[max_n][max_n];
bool hungary(int u)
} else if(slack > curslack) slack = curslack;
} return false;
}int km()
} }int ans = 0;
for (int i = 1; i <= n; i++) ans += gra[link[i]][i];
return ans;
}int main()
return 0;
}
HDU 2255 奔小康賺大錢 KM
裸km。include include include using namespace std const int max n 300 30 const int inf 0x3f3f3f3f int n x,n y 兩邊的點數 int g max n max n 二分圖權值 int link max...
HDU 2255 奔小康賺大錢 KM
傳說在遙遠的地方有乙個非常富裕的村落,有一天,村長決定進行制度改革 重新分配房子。這可是一件大事,關係到人民的住房問題啊。村里共有n間房間,剛好有n家老百姓,考慮到每家都要有房住 如果有老百姓沒房子住的話,容易引起不安定因素 每家必須分配到一間房子且只能得到一間房子。另一方面,村長和另外的村領導希望...
hdu2255 奔小康賺大錢(KM)
problem description 傳說在遙遠的地方有乙個非常富裕的村落,有一天,村長決定進行制度改革 重新分配房子。這可是一件大事,關係到人民的住房問題啊。村里共有n間房間,剛好有n家老百姓,考慮到每家都要有房住 如果有老百姓沒房子住的話,容易引起不安定因素 每家必須分配到一間房子且只能得到一...