題意:給出乙個n*m的矩陣,求選出若干個互不不相鄰 的數,使得和最大
分析:劉汝佳白書給出求帶權二分圖的最大獨立集解法。即每個節點有乙個權值,要求選出一些節點,互不相鄰,且權值最大
加入乙個源點s和乙個匯點t,使得s向其中乙個集合的點連一條邊,容量為該點的權值,另一部分的點向t連一條邊,容量為該點的權值,原來的邊容量為inf,求圖的乙個割,將割對應的邊刪掉就是要求的解,權和為所有權減去割的容量
#includeusingview codenamespace
std;
const
int maxn=2505
;const
int inf=1e9;
const
int dx=;
const
int dy=;
struct edge;
struct
dinic);
edges.push_back((edge));
m=edges.size();
g[from].push_back(m-2
); g[to].push_back(m-1
); }
bool
bfs()}}
return
vis[t];
}int dfs(int x,int
a) }
return
flow;
}int maxflow(int s,int
t)
return
flow;
}void init(int
n)}dinic;
intnum[maxn][maxn],sum;
intn,m,u,v,w;
bool judge(int x,int
y)int
main()}}
else
dinic.add(i*m+j,t,num[i][j]);
}//cout
}return0;
}
hdu 1569 方格取數2(網路流最小割)
題目 和第一部一樣,就是建圖建錯了,氣死我了。給你乙個m n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括2整數m,n和m n個非負數 m 50,...
hdu 1569 方格取數 2
題目大意 求在n m的棋盤中選出兩兩不相鄰的數,使得和最大。題目思路 按西洋棋黑白染色,源點到黑點容量為數字,黑點到它周圍的白點容量為無窮,白點到匯點容量為數字,最後答案為總值減去最小割 摘自網上 include include include include include include inc...
hdu 1569 方格取數 2
和上一題差不多,都是用最大流來做,可是有人能告訴我stl和直接用陣列,真的有那麼大區別嗎?stl超時,陣列0ms,這是什麼資料,有那麼叼嗎 附上兩份 希望過路的人能給我看看為什麼會超時 stl的 include include include include include include incl...