建立源點s,匯點t,s與每個人之間建邊,費用為0,容量為1,每個房子與t建邊,費用為0容量為1,每個人與每個房子之間建邊,費用為人到達房子的距離,容量為1,
則該題轉化為求最小費用流問題。
#include#include#include#include#define max 1<<31-1
#define min(x,y)(xg[210];
int dis[210],pree[210],prev[210];
int dist(point p1,point p2)
void add_edge(int from,int to,int cap,int cost)
); g[to].push_back((edge));
}int min_cost_flow(int s,int t,int f)}}
} if(dis[t]==max)
break;
int d=max;
for(u=t;u!=s;u=prev[u])
res+=dis[t];
f-=d;
for(u=t;u!=s;u=prev[u])
}return res;
}int main()
{ int m,n,i,j,num1,num2,s,t;
while(scanf("%d%d",&m,&n)&&(m||n))
{ num1=0;
num2=0;
gets(str[0]);
for(i=0;i
poj 2195(最小費用流)
題意 給你乙個n m的地圖,h代表這個點有乙個房子,m代表這個點是乙個人,每次h走一步就花費一,問最小花費使得每個人能進入乙個房間 建立乙個源點和匯點,每個人和源點相連,每個房子和匯點相連,每個人和每個房子相連,花費為曼哈段距離 include include include include inc...
poj 2195 最小費用最大流
題意 給出一張圖,m代表人,h代表house,問所以的人走到house裡的最小花費 每步花費1 5 5 hh.m mm.h簡單題目直接 include include include include includeusing namespace std const int m 102 const i...
POJ 2195 (費用流 最小權匹配)
題目大意 給出n m的地圖,由幾個h 房子 和m 人 求每個人都走到乙個房子的最少需要的總步數。n,m 100 h m 兩種方法,看心情!1.最小費用最大流 算出每個人到每個房子的步數 s和每個人連邊,容量1,費用0 每個人和每個房子連邊,容量inf,費用為步數 每個房子和t連邊,容量1,費用0 i...