BZOJ 3774 最優選擇 最小割

2022-03-13 10:12:06 字數 1742 閱讀 1719

此題與「文理分科」那道題目有些類似。都是使用最小割來求解,先加上可能獲得的權值,在減掉必須捨棄的權值(最小割)。

文理分科是規定每個人和 s 連就是選文,和 t 連就是選理。然後如果乙個人和相鄰的人都全文就會獲得乙個權值,那麼我們就為這個權值建乙個點,讓這個點與必須同時選文的5個人連 inf 邊。這樣只要這 5 個人中有乙個人選了理,就必須捨棄這個權值了。

再回到這道題目,這道題獲得權值的條件是這個點被控制或這個點相鄰的 4 個點都被控制。 這個「或」並不太好處理,我們就把這個條件拆成兩個不相交的條件:

1)這個點被控制,可以獲得權值。

2)這個點沒有被控制且相鄰的4個點都被控制,可以獲得權值。

這樣的話第乙個條件就是不控制這個點需要付出的代價,第二個條件是「這個點沒有被控制且相鄰的4個點都被控制」,只要有乙個點不符合就要割掉這個權值。

但是這些需要同時滿足的條件有「被控制」和「不被控制」,直接用「文理分科」的建圖方式是方向不一致的。

所以我們利用矩陣可以黑白染色成為二分圖的性質,將矩陣的格仔黑白染色之後,對於白點和黑點用相反的方式連邊,這樣黑點的「被控制」和白點的「不被控制」就是乙個方向的了。

注意剛開始時預先加到答案裡的權值是給定權值的兩倍,因為我們將權值分成了兩種情況。

#include #include #include #include #include #include using namespace std;

inline int gmin(int a, int b)

const int maxmap = 50 + 5, maxn = 5000 + 5, maxm = 100000 + 5, inf = 999999999;

const int dx[5] = , dy[5] = ;

int n, m, nm, tot, ans, s, t;

int f[maxmap][maxmap], a[maxmap][maxmap], b[maxmap][maxmap], d[maxn], num[maxn];

struct edge

e[maxm], *p = e, *point[maxn], *last[maxn];

inline void addedge(int x, int y, int z)

inline bool inside(int x, int y)

int dfs(int now, int flow)

if (d[s] >= tot) return ret;

if (--num[d[now]] == 0) d[s] = tot;

++num[++d[now]];

last[now] = point[now];

return ret;

}int main()

tot = 2 * nm; s = ++tot; t = ++tot;

int x, y;

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

for (int j = 1; j <= m; ++j)

}else

}} memset(d, 0, sizeof(d));

memset(num, 0, sizeof(num)); num[0] = tot;

for (int i = 1; i <= tot; ++i) last[i] = point[i];

while (d[s] < tot) ans -= dfs(s, inf);

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

return 0;

}

BZOJ 3774 最優選擇

題意 小n手上有乙個n m的方格圖,控制某乙個點要付出aij的代價,然後某個點如果被控制了,或者他周圍的所有點 上下左右 都被控制了,那麼他就算是被選擇了的。乙個點如果被選擇了,那麼可以得到bij的回報,現在請你幫小n選乙個最優的方案,使得回報 代價盡可能大。一眼是最小割,然後建邊的時候就糊塗了 首...

BZOJ 3774 最優選擇 最小割

驚了我竟然排rank 2,鹹魚有朝一日也能翻身。1a 先留個坑 include include include using namespace std const int n 5005,m n 10,inf 0x3f3f3f3f namespace graph bool bfs return lev...

最優選擇最小頻移鍵控(MSK)

最小頻移鍵控 msk 在數字調製中,最小頻移鍵控 msk 是一種在20世紀50年代末和60年代開發的連續相位頻移鍵控。與oqpsk類似,msk使用在正交分量之間交替的位元進行編碼,其中q分量延遲了符號週期的一半。然而,代替oqpsk使用的方波脈衝,msk將每個位編碼為半正弦波。這導致恆模數訊號 恆定...