HDU 4859 海岸線 最小割

2021-06-22 20:55:12 字數 1174 閱讀 9504

強烈建議閱讀一下最小割模型在資訊學競賽中的應用

其中2.2.2的optimal marks一題和此題建模非常相像。

在原圖外圍虛擬一圈『d』,我們要最大化的周長,就可以等價為最大化相鄰的'd'和'.' 的總對數,也就是最大化相鄰格仔不同型別的總對數。

按照**中的建圖方式,我們可以最小化相鄰格仔不同型別,

反過來想,稍微改變一下建圖,就可以最小化相鄰格仔相同型別

建圖:將地圖奇偶建圖分成二部。我們假設x集表示 . y集表示 d (只是為了理解方便)

1、若相鄰則連邊,容量1。

2、若當前點在地圖上是 . 但是卻被分到了y集,或者當前點是 d ,卻被分到了x集,就和源點連一條inf的邊。

3、若當前點在地圖上是 . 並且被分到了x集,或者當前點是 d ,被分到了y集,就和匯點連一條inf的邊。

分析一下就知道,只有 . --> . 或者 d --> d ,也就是型別相同的,才能從源流向匯。

源連線的點是「分錯了」的點( x集的d或者y集的. ),匯連線的點是「分對了」的點(x集的.或者y集的d),所以如果要從源流到匯,則一定是d->d或者.->.,也就是相同型別的,求出最小割就是最小化相同的。

最後用總對數減去這個就是答案

#include#include#include#include#include#include#include#include#include#include#define eps  1e-12

#define inf 0x7fffffff

#define maxn 2700

using namespace std;

int n,m;

int en;

int st,ed;

int dis[maxn] ;

int que[9999999];

struct edge

;edge e[9999999];

int head[maxn];

void add(int a,int b,int c)

int bfs()

void build()

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

}int dinic()

return maxflow;

}int main()

return 0;

}

hdu 4859 海岸線(最小割)

題目 建模 一種新的建圖思路 周圍加了一圈d,令d為奇,為偶,若d確實為奇,與ss連inf,若為偶,與tt 連 inf。同理。然後與周圍的點連 1 盡量保持不變的 習慣,最小割就從 1,1 開始建。include include include include include include def...

hdu 4859 海岸線 最小割

歡迎來到珠海!由於土地資源越來越緊張,使得許多海濱城市都只能依靠填海來擴充套件市區以求發展。作為z市的決策人,在仔細觀察了z市地圖之後,你準備通過填充某些海域來擴充套件z市的海岸線到最長,來吸引更多的遊客前來旅遊度假。為了簡化問題,假設地圖為乙個n m的格仔,其中一些是陸地,一些是可以填充的淺海域,...

HDU 4859 海岸線 最小割

這題考察的是最小割。我們可以這樣想 海岸線的長短變化都是e引起的,我們通過把 e 變成 或 d 來使海岸線最大化。我們要算海岸線就是算格仔 和格仔 d 在原有地圖周圍四面都要加 d 相鄰的面數,要使它最大,就是要使 與 d 與 d 相鄰的面數最小,而面數最小可以用最小割來做。現在我們先把格仔上的點黑...