省選專練AHOI2009最小割

2021-08-18 05:26:04 字數 1489 閱讀 4127

考察:最小割的真正含義

我們知道最大流在意義上與最小割完全不同

但是最大流在數值上與最小割一樣

本題也就是考察了在最大流上跑最小割的含義。

如何斷定一條邊被割斷:反向邊流量為w原邊流量為0

這說明水流全部從這裡流走了,也就是最小割。

看問題:

「問題一:是否存在乙個最小代價路徑切斷方案,其中該道路被切斷? 問題二:是否對任何乙個最小代價路徑切斷方案,都有該道路被切斷? 現在請你回答這兩個問題。」

請冷靜思考:

這現在的參量網路是一張類分層圖。

只要把割斷的邊無視,那麼這就是幾塊。

而且這也就成了混合圖

我們考慮強聯通關係。

第一s與t一定不在一起,否則圖並沒有割斷。

其次當一條邊(w=0):u,v的u,v不在一起,那麼他們一定可以被選擇在一條最小割上

因為割斷它圖並沒有聯通。

對於問題二,只要u和s在一起v和t在一起那麼說明他們必須被割,否則圖永遠聯通。

#includeusing namespace std;

const int n=1e6+1000;

const int inf=1e9+7;

inline void read(int &x)

while(ch>='0'&&ch<='9')

x*=f;

}struct front_stare[n*2];

int cnt=1;

int first[n]={};

void addedge(int u,int v,int w)

void add(int u,int v,int w)

int s;

int t;

int n,m;

int d[n]={};

queueq;

bool bfs()

} }return d[t]!=-1;

}int dfs(int st,int ed,int nowdat)

int dat=0;

for(int i=first[st];i;i=e[i].nxt)

} }if(!dat)

return dat;

}int dinic()

return ret;}//

int dfn[n]={};

int low[n]={};

int color[n]={};

int vis[n]={};

int scc=0;

int tot=0;

stackst;

void tarjan(int u)

else

}} }

if(low[u]==dfn[u])while(x!=u); }}

int main()

dinic();

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

} for(int i=2;i<=cnt;i+=2)

}}

省選專練APIO2009Oil採油區域

神仙題難點在於 實現 這狗日的題。首先暴力是這樣的 列舉三個座標 這是n 6做法,沒什麼卵用 但是我們發現把一張圖分割成3塊那麼可以做 但是問題是這是情況多多的 所以成了碼農題 includeusing namespace std const int n 1801 int sum n n int a...

省選專練SCOI2005掃雷

這是乙個智商檢測題 狀壓dp。如果你玩過掃雷,並且內心有一棵平衡樹 bb數 你就會發現答案只有0,1,2共計三種。於是法一 模擬。答案對不對只會取決於第乙個是什麼。模擬兩邊就好了。includeusing namespace std int i,j,k,m,n,ans 2,a 10001 b 100...

省選專練ZJOI2005午餐

這是個好題 考察dp優化,dp,貪心,01揹包變種。好首先對吃飯時間從大到小排序,因為一隊人打飯時長總和一樣。dp i,j 表示前i個人,第一組用j的時間。放第乙個揹包 dp i j min max dp i 1 j a i w j a i v 放第二個揹包 dp i j min max dp i ...