網路流24題 2 cogs396魔術球問題

2021-07-29 13:05:12 字數 1300 閱讀 5357

至於那個貪心的證明我是沒整出來的。。。看了黑書,可能是我沒有認真看吧。

最小路徑點覆蓋:用最少的邊去覆蓋盡可能多的點(全部)。

黑書上介紹了乙個求最小路徑點覆蓋的方法,很值得借鑑,那就是每個點

i 轉化為乙個i和

i′,當原圖存在邊(i

,j) 時,連邊(i

,j′)

,求這個s−

t 割的最大二分圖匹配,再用點數-這個值即為最小路徑點覆蓋。

為什麼呢?因為假定原圖每條邊只對應乙個點,那麼

n 個點需要

n條邊去覆蓋。每存在一條連了2個點的邊就可以省去一條邊,而這個二分圖匹配能保證是互不有重疊點的邊集的最大值,所以肯定最多能省去這麼多條邊;能省去這麼多條邊後自然省去每條邊對應的那個點;因而用總點數-最大匹配即為答案。

具體到這個題,就是把兩個和為完全平方數的兩球連一條邊,列舉,資料比較小,能過。而且我並不覺得設乙個上界和下界去二分能提公升多大的速度,所以直接用fo

r 列舉。

唯一注意的是,上一次列舉完的邊還可以用的 要加的邊只是所有點到多的點還要加的邊。然後這樣的話跑cogs的資料足夠。。。。

然後還是要用匈牙利演算法求最大匹配;judge函式用來判斷是否和為平方數。

**

#include 

#include

#include

#include

#include

#include

#include

#include

//ac

using

namespace

std;

const

int maxn=10000;

vector

g[maxn];

void addedge(int from,int to)

int match[maxn];

bool book[maxn];

int n;

bool judge(int n)

return

false;

}bool dfs(int v)}}

return

false;

}bool cal(int res)

}int ans=0;

for(int i=1;i<=res;i++)}}

return (res-ans)<=n;

}int main()

}printf("%d\n",ans-1);

return

0;}

網路流24題 COGS 750 柵格網路流

輸入檔案 flowa.in輸出檔案 flowa.out簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 bob 覺得一般圖的最大流問題太難了,他不知道如何解決,於是他想嘗試乙個簡單點的 柵格網路中的最大流問題,這個雖說簡單了一點,但對 bob 來說依舊太難,現在他有個麻煩需要你幫忙 給...

COGS461 網路流24題 餐巾

問題描述 乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f 3 把餐巾送到慢洗部,洗一塊需n天 n m 費用需s分 s在每天結束時,餐廳必須決定多少塊用過的餐巾送到快洗部,...

網路流 24 題

1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...