No 24 POJ3469 鄰接表網路流

2021-09-25 10:54:28 字數 1075 閱讀 3946

經典網路流模版題:

首先,求最小割就是求最大流。

稀疏圖,採用陣列模擬二維動態鍊錶。

小 tr

ic

k\red

小trick

:在會產生回邊的地方,直接加入雙向邊,互相索引,提高dfs速度

大 tr

ic

k\red

大trick

:stdio.h 比 cstdio 快一倍

// shelldawn

// poj3469

// no.24

#include#include#include#define mm(x,y) memset(x,y,sizeof(x))

#define inf 0x3f3f3f3f

using namespace std;

#define maxn 20010

#define maxm 200010

int n;

struct edge;

// maxm每一條邊都可能加回邊,maxm*2

// maxn每個點都鏈結兩個cpu,maxn*2

edge e[maxm*2 + maxn*2];

int cnt = 1; // 0節點為所有根

int pre[maxn]; // 指向隊尾

int v[maxn];

void add(int a,int b,int v,int r)

bool bfs(int s)}}

if(v[n+1] > 0) return true;

return false;

}int dfs(int now,int minflow)

}if(flow == 0) v[now] = 0;

return flow;

}int main()

while(m--)

int ans = 0;

while(bfs(0)) ans+=dfs(0,inf);

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

return 0;

}

挑戰 p236 poj 3469 網路流

這種建模的方式挺經典的。對於最小費用化為兩個集合的 問題,可以轉化為最小割。然後如果屬於s,那麼就割掉到s的邊。還有就是在這裡的 模組組合 的概念。要想切斷聯絡,就要付出費用,所以 組合中的兩個頂點連邊 include include include include include include ...

poj 3275 鄰接表優化Floyd

傳統floyd是列舉列舉乙個點k在分別列舉k左右兩邊的點i和點j,但是這道題n 1000,n 3的複雜度接受不了,怎麼辦呢?我們看到此題邊很少,所以我們可以存下來每個點的出邊和入邊,然後列舉k是只需要列舉出邊和入邊即可 如下 include include include include inclu...

計蒜網鄰接表的使用

這一節我們來複習下前面剛學的鄰接表的使用。給出乙個包含有向圖和無向圖的混合圖 g,圖上有 n 個點和 m 條邊,現在你需要使用鄰接表來儲存該混合圖 g 並按格式輸出鄰接表。輸入第一行為兩個正整數 n 和 m 1 n,m 100 表示混合圖上的 nnn 個點和 m 條邊。接下來輸入 m 行,每行輸入三...