題目
乙個橢圓可以覆蓋兩個相鄰的格仔,給你乙個矩陣,求覆蓋所有*點最少用幾個橢圓。
四連通的棋盤就是乙個二分圖,聯想西洋棋棋盤即可。
所以把能綁在一塊兒的點綁在一塊,剩下的點乙個點乙個就ok了。
網上有題解說這個是最小路徑覆蓋實在是百思不得其解= =.....**來的路徑
呵呵....擔心了一天,原來是 memset(x,0,sizeof(x))寫錯了 ..... zwj 大神你看**的姿勢還可保持否?.....太尼瑪犀利了....
至於說到匈牙利啊,本身和ford fulkerson 的原理差不多,就是不停的增廣,匈牙利只能在無向圖上跑,有向圖的。。不知道不懂,但若是用最大流跑二分圖就得建成有向圖了,只保留從集合x到集合y的邊。匈牙利跑的時候從哪邊開始找增廣路無所謂啦,反正找到一條是一條。這個寫法是對稱的,白書上的模板好像不是對稱的。
#include #include #include #include #include using namespace std;
#define pb push_back
#define max_v 10000
#define ms(x) memset(x,0,sizeof(x))
int v;
vectorg[max_v];
bool used[max_v];
int match[max_v];
char b[100][100];
int mp[10000];
int dir[4][2]=;
void addedge(int f,int t)
bool dfs(int x)
{ used[x]=1;
for(int i=0;i=0&&tx=0&&ty
匈牙利演算法之POJ1466
題目連線 這個題目注意.遍歷的點是全部的點.而並不是類似前面的題目一樣僅僅是遍歷x,y其中的乙個集合.對於這樣的題目來說的話.做法一就是變成比較標準的二部圖的形式,外部遍歷x,內部遍歷y.如果直接在內部和外部都對x y的集合進行遍歷的話.對於單向邊來說的話,求出來的結果是最大匹配.但是對於雙向邊來說...
POJ3041 Asteroids(匈牙利演算法)
嘟嘟嘟 雖然我已經會網路流了,但是還是學了乙個匈牙利演算法。就跟我會線段樹,但還是學了樹狀陣列一樣。其實匈牙利演算法挺暴力的。簡單來說就是先貪心匹配,然後如果左部點 i 匹配不上了,就嘗試更改前面已經匹配好的點,騰出地給他匹配。因此對於每乙個點跑一遍匈牙利演算法,如果這個點匹配成功,總匹配數就加1。...
POJ 2289 二分 匈牙利
題意 把 n 個人分成 m 組,給出 n 個人各自可選的組別集合,求一種合法的分配方案,使得人數最多的組的人數最少 分析 最多最少,一般二分跑不了,然後求分配就匈牙利稍微變形就可以了 變形是為了適應二分 include include include include using namespace ...