const int maxn = ;
const int inf = 0x3f3f3f3f;
//path用來儲存找到一條費用最小的增廣路
int path[maxn], dis[maxn], head[maxn], vis[maxn], cnt;
void init()
struct ac edge[maxn];
void addedge(int u, int v, int flow, int cost) ;
head[u] = cnt++;
edge[cnt] = ;
head[v] = cnt++;
}int spfa(int s, int t)
} }
return dis[t] != inf;
} int mcmf(int s, int t, int &cost)
//找到最小流量後,更新該路上的邊的流量
for(int i = path[t]; i != -1; i = path[edge[i ^ 1].v])
maxflow += flow;
} return maxflow; //最大流
}
時間複雜度:可以證明上界為 o( n * m *f ) ,其中 f 表示流量。
const int maxn = ;
const int maxm = ;
const int inf = 0x3f3f3f3f;
int cur[maxn], head[maxn], dis[maxn], cnt;
bool vis[maxn];
int mincost = 0;
struct ac edge[maxm];
int init()
void addedge(int u, int v, int cap, int cost) ;
head[u] = cnt;
edge[++cnt] = ;
head[v] = cnt;
}bool spfa (int s, int t)
} }return dis[t] != inf;
}int dfs(int u, int t, int flow)
} }vis[u] = 0;
return ans;
}int mcmf(int s, int t)
return ans;
}
const int maxn = 500;
const int inf = 0x3f3f3f3f;
int pree[maxn], prev[maxn], dis[maxn], head[maxn], h[maxn], cnt;
bool vis[maxn];
void init()
struct acedge[maxn << 8];
void addedge(int u, int v, int cap, int cost) ;
head[u] = cnt++;
edge[cnt] = ;
head[v] = cnt++;
}int dijkstra(int s, int t)
} }
return dis[t] != inf;
}int mcmf(int s, int t, int &cost)
for (int i = t; i != s; i = prev[i])
cost += flow * h[t]; //每個單位流量都有費用
maxflow += flow;
} return maxflow;
}
const int maxn = ;
const int maxm = ;
const int inf = 0x3f3f3f3f;
int prev[maxn], pree[maxn]; // 前驅節點,和對應邊
int dis[maxn], h[maxn];
struct ac ;
vectorg[maxn << 3];
void init()
void addedge(int u, int v, int cap, int cost) );
g[v].push_back();//-1是因為u剛剛+一條邊
}int dijkstra(int s, int t)
} }return dis[t] != inf;
}int mcmf(int s, int t, int &cost)
for (int i = t; i != s; i = prev[i])
cost += flow * h[t];
maxflow += flow;
//cout << cost << endl;
}return maxflow; // 返回最大流
}
網路流 費用流
這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...
網路流 費用流
網路流有很多種類 其中最大流 有增廣路演算法和預流推進演算法。增廣路演算法就是不斷的新增增廣路。其中的dinic演算法。會稍微提到isap演算法 poj1273 首先想到dfs一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...
費用流模板
const int oo 1e9 無窮 const int mm 11111111 邊 const int mn 888888 點 int node,src,dest,edge int ver mm flow mm cost mm nex mm int head mn dis mn p mn q m...