已經好幾天沒寫解題報告了,今天年初一,呵呵,寫乙個,為今年開個好頭。下面步入正題:
poj1459這道題目的要求是求最大的消耗量。我們新增乙個源點s和乙個匯點t,與s相連的是所有的np(生產點),邊權值為其自己能產生的數值;與t相連的是所有的nc(消耗點),邊權值為其消耗最大值。至此便完成了網路的構圖。然後直接套用最大流的演算法模版即可解決。我使用的是ek演算法。
什麼是ek演算法?ek演算法的原理是利用bfs或者dfs每次找到網路中的一條增廣路徑,然後修改其流量值,直至無法找到增廣路徑為止。
下面給出ek的源**:
#include
#include
#include
#define max 65535
using namespace std;
int s,t,n,np,nc,m,tot;
int pre[102],d[102],fx[102],f[102][102],c[102][102];
char str[50];
bool visit[102];
void init()
for(i=1;i<=np;i++)
for(i=1;i<=nc;i++)
tot=0;
}bool bfs()
if(f[i][x]>0&&f[i][x]>temp)
if(temp>0)
j=t;
while(pre[j]!=-1)//修改流量值
tot+=delta;
return true;
}
}
} head++;
}
return false;
}void deal()
int main()
{while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=eof)
{init();
deal();
cout《除ek演算法外,最大流還有更好的實現方法,如sap,dinic,預留推進演算法。。都是些很不錯的演算法。
最大流是網路流的基礎,一定要牢牢掌握,而最大流的根本是增光路徑定理和最大流最小割定理,所以一定要理解好這兩個理論基礎。
poj1459 多源點網路流
題意 有n個點,np個供電點,nc個消費點,m條線路,接來題目先給出的是m條帶權路徑,然後是np個供電點和權值,接著就是nc個消費點和權值。題目要我們求出給定的圖最大能消費的總電量 就是求最大流 思路 建乙個超級源點,乙個超級匯點。超級源點連線所以供電站,所以消費點連線超級匯點。跑一遍網路流即可。i...
poj1459 網路流經典
題意 給幾個發電站,給幾個消耗站,再給幾個 點。發電站只發電,消耗站只消耗電,點只是 電,再給各個傳送線的傳電能力。問你消耗站能獲得的最多電是多少。思路 增加乙個超級源點,和超級匯點。把所給的發電站都和超級源點相連,把所給的消耗戰都和超級匯點相連。用ek求最大流。include include us...
POJ 1459 最大流 第二題
也是網路流的基礎,只是虛擬出乙個源點和終點,對應的生產值和消費值就加到與源點和終點的邊上,然後做一次bfs就好了。1 include 2 include 3 include 4 include 5 define inf 9999999996 define open file 7using names...