ff演算法,裸的貪心+反向弧
#include #include#include
#include
using
namespace
std;
struct
node
};//
為什麼在結構體裡面要加入反向邊這個屬性呢,因為我們用的是鄰接表
//雖然你立馬知道反向邊的起點,,但是你卻不知道你在這個起點的鍊錶的位置是多少,我們這裡可以記錄一下
const
int maxn=1005
;const
int inf=~(0u)>>1
;vector
g[maxn];int
s,t;
void add(int u,int v,int
cap)
bool
vis[maxn];
int dfs(int v,int t,int
f) }
}return0;
}int
maxflow()
return
flow;
}int
main()
printf(
"ans:%d\n
",maxflow());
return0;
}
dinic演算法,level和iter陣列的當前弧優化非常巧妙
#include #include#include
#include
#include
using
namespace
std;
struct
node
};const
int maxn=1005
;vector
g[maxn];
ints,t;
void add(int u,int v,int
cap)
bool vis[maxn];//
這個可以不要,level陣列可以起兩個作用,記錄層數和是否被訪問過,類似於dp陣列
intlevel[maxn],iter[maxn];
void
bfs()}}
//需要得到所有頂點的level資訊,一方面起vis的作用,另一方面起到轉移的作用
//而且考慮到可能同時存在多個最短增廣路
}int dfs(int v,int t,int
f) }
}return
0;//
這裡忘記return 0了...
}const
int inf=~0u>>1
;int
maxflow()
if(level[t]<0) return
flow;
memset(iter,
0,sizeof
(iter));
while((f=dfs(s,t,inf))>0) flow+=f;
}}int
main()
printf(
"ans:%d\n
",maxflow());
return0;
}
網路流複習
幾個月沒碰過網路流了,想她了,所以撿起來,這麼好的東西怎麼能不用?網路流是啥?網路流是給定乙個有向圖,每條邊有乙個容量,這個圖還有乙個起點叫源點,乙個終點叫匯點。把有向圖想象成有多條路徑的水流管道圖,每條邊的容量就是能經過該邊的最大水流的流量。最大流是啥?最大流就是從源點能流向匯點的最大流量和。增廣...
網路流複習
模型轉化 原題求最小代價,則直接設割掉的是需要選擇的。若原題求最大收益,則設割掉的是不選擇的,最後用總和減去最小割就是答案。1.3.1定義 1.3.2應用方法 給出的圖一般是乙個有向圖,乙個閉合圖可以看做是一些點具有相互依賴的關係。因此對於有依賴關係,並且題目可以轉化成給某些點賦權為正,某些點賦權為...
網路流複習計畫
既然是複習網路流,那就不會去做水題了吧233 a.bzoj3996 tjoi2015線性代數 看到題就被嚇壞了2333。線性代數根本沒看完好嗎?然後。md轉個模型就是網路流了 題目大意 給定乙個n n 的矩陣b 和乙個1 n 的行向量c 求乙個1 n 的01矩陣a 使 a b c at 最大 a b...