暑期總結 網路流

2021-07-15 08:11:45 字數 1112 閱讀 7884



一張圖中每條邊都有同一時間能承載的最大資料量,求最大網路流即求從起點到終點同一時間能運輸的最大資料量。

找到一條從起點到終點的路,那麼這條路上運輸的資料量為權值最小的邊的權值,然後再依次做下去,但這樣過早地阻塞了後面的流,會造成無法得到最優解。解決的方法是新增一條反向邊,如果邊

流過了k

,那麼反向邊

的權值即為

n-k;

這樣就形成了一張殘餘網路;

dinic

演算法:^_^

據說^_^

從終點到起點所經過的邊的數量越少,那麼效率就越高。所以說可以先做一遍

bfs,找出每乙個點的層數,然後在

dfs時就只做自己下一層的點;找出一條路上的最小值後更新每個點的正邊(減少)和反邊(增加);

dinic**:

#include #include #include using namespace std;

int flag[210],dis[210],n,m,num=2,fir[210],dl[500],head,tail;

struct pppe[500];

void ini()

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

int bfs()

} }return dis[n]<0x3f3f3f3f;

}int min(int x,int y)

int dfs(int s,int f)

} } return 0;

}int max_ans(int s)

} return ans;

}int main()

printf("%d\n",max_ans(1));

}}

!!question!!:

求大神回答這兩種寫法有什麼不同,都可以ac,但在不同的題中效率不一樣:

1:

int dfs(int s,int f)

} } return 0;

}

2:
int dfs(int s,int f) 

} return p-f;

}

題目小結 網路流

東拼拼,西湊湊,不就又水出一篇部落格嗎?例 1.text 首先可以想到在 1,n 列舉匯點,檢驗最大流是否為企鵝總數。每個點初始的企鵝數可以由 s rightarrow i 的邊表示,那跳出的企鵝呢?因為跳到哪個冰塊是未知的,所以不妨將 i 拆成兩個點 在入點與出點之間連邊權為跳出企鵝數的邊。例 2...

2019正睿金華集訓 0801總結 網路流

今天終於講了久仰其大名的網路流。網路流是乙個有向圖.容量 每條邊都有乙個容量 水管的最大水流容量 源點 出發點 水廠 匯點 結束點 廢水站 流 乙個合法解稱作乙個流,也就是一條可以從源點到匯點的一條合法路徑。流量 每條邊各自被經過的次數稱作其流量,最終收集的總數為整個流的流量。三個性質 1.容量限制...

暑期ACM集訓 網路流

problem 網路流模板 include include include include include include include using namespace std define inf 10000000 const int maxn 1000 struct edge vector g...