經典網路流模版題:
首先,求最小割就是求最大流。
稀疏圖,採用陣列模擬二維動態鍊錶。
小 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 行,每行輸入三...