国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【poj2195】Going Home

2019-11-08 02:59:48
字體:
供稿:網(wǎng)友

費用流水題 照著圖建圖直接搞

#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<cmath>using namespace std;const int max_n=105;const int max_m=105;const int max_N=max_n*2+2;const int max_M=max_n*max_n+max_n*2;const int max_e=max_M*2;const int inf=1e9;char ch;int n,m,maxflow,mincost,cntman,cnthome,N,dollar;int point[max_N],next[max_e],v[max_e],remain[max_e],c[max_e],tot;int last[max_N],dis[max_N];bool vis[max_N];queue <int> q;struct hp{ int l,r;}man[max_n],home[max_n];inline void clear(){ tot=-1; memset(point,-1,sizeof(point)); memset(next,-1,sizeof(next)); memset(v,0,sizeof(v)); memset(remain,0,sizeof(remain)); memset(c,0,sizeof(c)); memset(last,0,sizeof(last)); memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); while (!q.empty()) q.pop(); for (int i=1;i<=cntman;++i) man[i].l=man[i].r=0; for (int i=1;i<=cnthome;++i) home[i].l=home[i].r=0; cntman=cnthome=N=maxflow=mincost=0;}inline void addedge(int x,int y,int cap,int z){ ++tot; next[tot]=point[x]; point[x]=tot; v[tot]=y; remain[tot]=cap; c[tot]=z; ++tot; next[tot]=point[y]; point[y]=tot; v[tot]=x; remain[tot]=0; c[tot]=-z;}inline int addflow(int s,int t){ int ans=inf,now=t; while (now!=s){ ans=min(ans,remain[last[now]]); now=v[last[now]^1]; } now=t; while (now!=s){ remain[last[now]]-=ans; remain[last[now]^1]+=ans; now=v[last[now]^1]; } return ans;}inline bool bfs(int s,int t){ memset(dis,0x7f,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[s]=0; vis[s]=true; while (!q.empty()) q.pop(); q.push(s); while (!q.empty()){ int now=q.front(); q.pop(); vis[now]=false; for (int i=point[now];i!=-1;i=next[i]) if (dis[v[i]]>dis[now]+c[i]&&remain[i]){ dis[v[i]]=dis[now]+c[i]; last[v[i]]=i; if (!vis[v[i]]){ vis[v[i]]=true; q.push(v[i]); } } } if (dis[t]>inf) return false; int flow=addflow(s,t); maxflow+=flow; mincost+=flow*dis[t]; return true;}inline void major(int s,int t){ maxflow=0; mincost=0; while (bfs(s,t));}int main(){ while (~scanf("%d%d",&n,&m)){ if (!n&&!m) break; clear(); for (int i=1;i<=n;++i) for (int j=1;j<=m;++j){ ch=getchar(); while (ch!='.'&&ch!='H'&&ch!='m') ch=getchar(); if (ch=='m'){ man[++cntman].l=i; man[cntman].r=j; } if (ch=='H'){ home[++cnthome].l=i; home[cnthome].r=j; } } N=cntman+cnthome+2; for (int i=1;i<=cntman;++i) for (int j=1;j<=cnthome;++j){ dollar=abs((double)man[i].l-home[j].l)+abs((double)man[i].r-home[j].r); addedge(1+i,1+cntman+j,1,dollar); } for (int i=1;i<=cntman;++i) addedge(1,i+1,1,0); for (int i=1;i<=cnthome;++i) addedge(1+cntman+i,N,1,0); major(1,N);
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涟源市| 晋州市| 银川市| 华宁县| 安溪县| 盘山县| 元氏县| 奎屯市| 浦东新区| 嘉兴市| 平湖市| 鱼台县| 温宿县| 南充市| 荣昌县| 贵定县| 阿图什市| 六盘水市| 安达市| 潍坊市| 嫩江县| 米易县| 康马县| 无极县| 靖边县| 砚山县| 合阳县| 木兰县| 全椒县| 磴口县| 合阳县| 芦溪县| 双流县| 平罗县| 泗阳县| 名山县| 德化县| 昌都县| 宝坻区| 福州市| 东乌珠穆沁旗|