2021 網路流初步

2021-10-13 22:38:54 字數 1807 閱讀 8425

首先是一些概念,容量,流量,飽和弧,非飽和弧,零弧,非零弧,增廣路,殘量,殘量網路

這個方法的時間複雜度比較差 為

一直bfs找增廣路,直到找不到演算法結束,每次找到後,修改正向邊和反向邊的邊權即可

**

#includeusing namespace std;

int n,m,s,t;

const int inf=pow(2,31)-1;

const int maxm=5e3+3;

const int maxn=205;

vector g[maxn];

long long ans,flow;

long long dis[maxn][maxn];

int pre[maxn];

void bfs()

} }}void ek()

}int main()

ek();

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

return 0;

}

//這個ek再洛谷p3376上會t兩個點

首先通過bfs分層,然後用dfs多路同時增廣

時間複雜度

**

#includeusing namespace std;

int n,m,s,t;

const long long inf=1e18;

const int maxm=1e4+3;

const int maxn=205;

struct edge

e[maxm<<1];

long long ans,dis[maxn];

int head[maxn],cnt=1;

void add(int x,int y,int z)

bool bfs()

} }return (dis[t]!=-1);

}long long dfs(int x,long long flow)

} if(!res) dis[x]=-1;

return res;

}void dinic()

}int main()

dinic();

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

return 0;

}

寫反向邊 (^1) 的時候,cnt一定要從1開始啊,查了好長時間!!!就是最大流=最小割,建模時常用

先用dinic求出最大流,然後dfs遍歷剩餘網路中所有被遍歷的點存在集合s中即可

用spfa來找增廣路增廣,spfa的距離就是費用

**

#includeusing namespace std;

int n,m,s,t;

const int maxn=5e3+5;

const int inf=pow(2,31)-1;

const int maxm=5e4+5;

struct edge

e[maxm<<1];

int head[maxn],cnt=1;

void add(int x,int y,int a,int b)

int vis[maxn],dis[maxn],pre[maxn];

bool spfa()

}} }

return (pre[t]!=-1);

}void mcmf()

ans+=flow;

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

}int main()

mcmf();

return 0;

}

bzoj1834(網路流 費用流)

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。第一問裸的網路流 第二問 新建乙個匯點,將n號點與匯點相連,容量為k,限制最多增大的流量 費用為0 將原先每一條邊都新...

bzoj1834 網路擴容 網路流

好久沒寫題解了啊 給你一幅n個點的網路,先求出其1到n的最大流,每條弧還會有個屬性co sti cos ti 表示沒擴容乙個單位的費用,現在我們要求的就是擴容k個單位的最小費用 這是一道比較裸的網路流,第一問直接dinic就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...

網路流初步

問題 最大流問題 假設 把一些物品從結點s 源點 運送到t 匯點 可以從其他結點中轉。1.容量 對於一條邊 u,v 它的物品上限成為容量,記為c u,v 2.流量 實際運送的物品成為流量,記為f u,v 目標 最大化從s點流出的淨流量,即最大化 容量c與流量f滿足3個性質 1.容量限制 對g中的每條...