一些網路流。

2021-06-22 18:32:41 字數 2555 閱讀 5703

poj 3281

題意:每一頭牛都有它喜歡吃的食物和飲料,問最多能滿足多少頭牛 讓它吃到它喜歡吃的食物和飲料。

思路:從源點s對每乙個食物連一條邊,容量為1, 然後食物對喜歡吃這種食物的牛連邊,容量也為1,然後每頭牛連一條邊到喜歡吃的飲料 容量也為1。

每個飲料連邊到匯點,容量為1。  這樣圖構好了,但是每頭牛可能會產生吃多個食物或者多個飲料的情況,所以對牛這個點也要進行限制。每頭牛限制通過的流量為1

把牛拆成兩個點 中間連一條容量為1的邊,每個點分別連著食物和飲料,這樣求乙個最大流就行了。

#include#include#include#include#include#include#define inf 100000000

using namespace std;

struct edge;

vectorg[808];

int level[808];

int iter[808];

int n,f,d;

void add_edge(int from,int to,int cap)

); g[to].push_back((edge));

}void bfs(int s)}}

}int dfs(int v,int t,int f)}}

return 0;

}int max_flow(int s,int t)

}int main()

;vectorg[1005];

int dist[1005];

int n;

int prevv[1005];

int preve[1005];

bool inque[1005];

void add_edge(int from,int to,int cap,int cost)

); g[to].push_back((edge));

}int min_liu(int s,int t,int f)}}

}//cout<

題意:有一些玩具和一些工廠  每個玩具在不同的工廠加工的時間不同,問平均時間最短多少。

思路:對於乙個工廠 如果有k個玩具加工 總時間為t=k*a1+(k-1)*a2+......1*ak;

我們可以把每個工廠的點拆成n個,每個玩具對第i個工廠的第j個點連邊 費用為 j*zx.表示這個玩具在這個工廠第j個加工。

然後求乙個最小費用就行了。

#include#include#include#include#include#include#include#include#define inf 1000000000

using namespace std;

struct edge;

vectorg[3005];

void add_edge(int from,int to,int cap,int cost)

); g[to].push_back((edge));

}int dist[3005];

bool inque[3005];

int prevv[3005];

int preve[3005];

int min_liu(int s,int t,int f)}}

}if(dist[t]==inf) return -1;

int d=inf;

for(int v=t;v!=s;v=prevv[v])

d=min(d,g[prevv[v]][preve[v]].cap);

f-=d;

res+=d*dist[t];

for(int v=t;v!=s;v=prevv[v])

}return res;

}int k[105][105];

int main()

;vectorg[505];

int level[505];

int iter[505];

void add_edge(int from,int to,int cap)

); g[to].push_back((edge));

}void bfs(int s)}}

}int dfs(int v,int t,int f)}}

return 0;

}int max_flow(int s,int t)

return res;

}bool vis[25][10];

int main()

;vectorg[305];

int level[305];

int iter[305];

void add_edge(int from,int to,int cap)

); g[to].push_back((edge));

}void bfs(int s)}}

}int dfs(int u,int t,int f)}}

return 0;

}int max_flow(int s,int t)

}int k[305][305];

void floyd(int n)

printf("%d\n",r);

}}

一些網路流知識

有向圖 點無容量不用說,點有容量拆點。無向圖 點無容量 正反邊都有容量。點有容量 拆點,乙個代表出點,乙個代表入點,入到出有點容量,出點連其他點入點。以上是基本構圖。最大匹配 最小點覆蓋 所有定點數 最大獨立集 最小邊覆蓋 最小路徑覆蓋 原圖點數 新圖最大匹配 最小路徑覆蓋要拆點做 以下 n支球隊打...

關於網路流的一些經驗(一)

前幾天做了一些題 noi2006 最大獲利 其實最大權閉合圖我是分類討論出來的 題意 每個點有代價,某些特定的兩個點組合會產生乙個收益,求最大收益 一開始覺得是乙個裸的最大流,但是顯然不能知道怎麼建出最大流的收益 於是考慮逆向思維 看題解 看到最小割之後把網頁關了 然後就做了個奇葩思路 考慮我已經獲...

一些網路3

閘道器 gateway 就是乙個網路連線到另乙個網路的 關口 在internet網中,閘道器是一種連線內部網與internet上其它網的中間裝置,也稱 路由器 閘道器位址是可以理解為內部網與internet網資訊傳輸的通道位址。按照不同的分類標準,閘道器也有很多種。tcp ip協議 裡的閘道器是最常...