#include #include #include #include #include using namespace std;
const int nn=210;
const int mm=100000;
const int inf=0x3fffffff;
inline int abs(int x)
int n,m,s,t,nv,en,head[nn];
struct edge
e[mm];
inline void add(int u,int v,int c,int f1,int f2)
//這題的很多版本的流量都是用的鄰接矩陣,我寫慣了鄰接表,強迫症下不喜歡矩陣了~
int dis[nn],cou[nn],p[nn];
bool vis[nn];
int circle_spfa()
if (++cou[v]>=nv) return v;}}
}return -1;
}int ans[nn][nn];
void solve()
puts("suboptimal"); //單詞拼錯,貢獻wa n次
memset(vis,0,sizeof(vis));
while (!vis[x])
//spfa退出的點未必是負圈中的點
v=x; do
while (v!=x);//消圈
memset(ans,0,sizeof(ans));
for (i=0; ifor (i=1; i<=n; i++)
}int x[nn],y[nn],z[nn],s1[nn],s2[nn];
int main()
}for (i=1; i<=n; i++) add(s,i,0,z[i]-s1[i],s1[i]);
for (i=1; i<=m; i++) add(i+n,t,0,z[i+n]-s2[i],s2[i]);
solve();
}return 0;
}
poj 2175 費用流 消圈
這道題如果直接費用流會超時。題目只是讓我們判斷是否是最好的情況,我們只需要找到更好的一種情況即可,不需要求最好的。也就是說按照最小費用流的做法,我們只需要在殘餘網路還能找到乙個負圈的即可。這是充分必要條件,如果達到最優解,就沒有負圈了。所以我們按照題意建立圖還有殘餘網路。之後判斷圖中是否存在乙個負圈...
poj 2175 最小費用最大流TLE
題意 一條街上有n個大樓,座標為xi,yi,bi個人在裡面工作。然後防空洞的座標為pj,qj,可以容納cj個人。從大樓i中的人到防空洞j去避難所需的時間為 abs xi pi yi qi 1。現在設計了乙個避難計畫,指定從大樓i到防空洞j避難的人數 eij。判斷如果按照原計畫進行,所有人避難所用的時...
poj 2175 費用流判負環 消環
題意 給出n棟房子位置和每棟房子裡面的人數,m個避難所位置和每個避難所可容納人數。然後給出乙個方案,判斷該方案是否最優,如果不是求出乙個更優的方案。思路 很容易想到用最小費用流求出最優時間,在與原方案花費時間對比判斷原方案是否最優。但是這種方法會超時的。放棄該思路。看看題目沒要求要最優解,而是得到乙...