日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 2195 Going Home / HDU 1533(最小费用最大流模板)

發布時間:2024/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2195 Going Home / HDU 1533(最小费用最大流模板) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:

有一個最大是100 * 100 的網格圖,上面有 s 個 房子和人,人每移動一個格子花費1的代價,求最小代價讓所有的人都進入一個房子。每個房子只能進入一個人。

算法討論:

注意是KM 和 MCMF算法,我寫的是MCMF算法,一開始想的是連10000個點,但是不會連那些大眾點之間的邊,只會連超級點和普通點之間的邊。后來覺得只要連房子點和

人點就可以了。連從人到房子的邊,容量是1,花費是他們之間的曼哈頓距離,然后超級源點和超級匯點像上面那樣連接,注意連點的時候把他們每個點都具體化一下,就是把點值

都精確到一個連續的范圍內去。然后做從超級源點到超級匯點的MCMF算法就可以了。至于那10000個之間的連邊,覺得雖然效率不高,但是還是有必要考慮一下。大家有知道的撒

告訴一下。感謝萬分。

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <queue> 7 8 using namespace std; 9 10 struct MCMF{ 11 static const int N = 200 * 200 + 5; 12 static const int M = 200 * 200 * 4 + 100; 13 static const int oo = 0x3f3f3f3f; 14 15 int n, m, s, t, tot; 16 int first[N], next[M]; 17 int u[M], v[M], cap[M], flow[M], cost[M]; 18 int dis[N], a[N], inque[N], pre[N]; 19 20 void Clear(){memset(first, -1, sizeof first);tot = 0;} 21 22 void Add(int from, int to, int cp, int flw, int ct){ 23 u[tot] = from; v[tot] = to; cap[tot] = cp; flow[tot] = 0; cost[tot] = ct; 24 next[tot] = first[u[tot]]; 25 first[u[tot]] = tot; ++ tot; 26 u[tot] = to; v[tot] = from; cap[tot] = 0; flow[tot] = 0; cost[tot] = -ct; 27 next[tot] = first[u[tot]]; 28 first[u[tot]] = tot; ++ tot; 29 } 30 31 bool bfs(int &flw, int &ct){ 32 for(int i = 0; i <= n + 1; ++ i) dis[i] = oo; 33 memset(inque, 0, sizeof inque); 34 dis[s] = 0; pre[s] = 0; a[s] = oo; inque[s] = 1; 35 36 queue <int> q; 37 q.push(s); 38 while(!q.empty()){ 39 int now = q.front(); q.pop(); 40 inque[now] = 0; 41 42 for(int i = first[now]; i != -1; i = next[i]){ 43 if(cap[i] > flow[i] && dis[v[i]] > dis[now] + cost[i]){ 44 dis[v[i]] = dis[now] + cost[i]; 45 a[v[i]] = min(a[now], cap[i] - flow[i]); 46 pre[v[i]] = i; 47 if(!inque[v[i]]){ 48 inque[v[i]] = 1; q.push(v[i]); 49 } 50 } 51 } 52 } 53 54 if(dis[t] == oo) return false; 55 flw += a[t]; 56 ct += dis[t] * a[t]; 57 58 int now = t; 59 while(now != s){ 60 flow[pre[now]] += a[t]; 61 flow[pre[now]^1] -= a[t]; 62 now = u[pre[now]]; 63 } 64 return true; 65 } 66 67 int MinCostMaxFlow(int s, int t){ 68 this->s = s;this->t = t; 69 int flw = 0, ct = 0; 70 while(bfs(flw, ct)); 71 return ct; 72 } 73 }Net; 74 75 struct Position{ 76 int l, r, id; 77 Position(int _l=0, int _r=0, int _id=0): l(_l), r(_r), id(_id){} 78 }mm[205], HH[205]; 79 80 int ns, ms, cnt1, cnt2, tp1, tp2; 81 char str[105][105]; 82 83 void Solve(){ 84 for(int i = 1; i <= tp1; ++ i){ 85 for(int j = 1; j <= tp2; ++ j){ 86 int x1 = mm[i].l, y1 = mm[i].r; 87 int x2 = HH[j].l, y2 = HH[j].r; 88 Net.Add(mm[i].id, HH[j].id, 1, 0, abs(x1-x2) + abs(y1-y2)); 89 } 90 } 91 } 92 93 int main(){ 94 95 while(scanf("%d%d", &ns, &ms) && ns && ms){ 96 Net.Clear(); 97 cnt1 = cnt2 = 0; 98 tp1 = tp2 = 0; 99 for(int i = 1; i <= ns; ++ i) 100 scanf("%s", str[i] + 1); 101 for(int i = 1; i <= ns; ++ i){ 102 for(int j = 1; j <= ms; ++ j){ 103 if(str[i][j] == 'm') ++ tp1; 104 else if (str[i][j] == 'H') ++ tp2; 105 } 106 } 107 Net.n = tp1 + tp2; 108 for(int i = 1; i <= ns; ++ i){ 109 for(int j = 1; j <= ms; ++ j){ 110 if(str[i][j] == 'm'){ 111 ++ cnt1; 112 Net.Add(0, cnt1, 1, 0, 0); 113 mm[cnt1] = (Position){i, j, cnt1}; 114 } 115 } 116 } 117 for(int i = 1; i <= ns; ++ i){ 118 for(int j = 1; j <= ms; ++ j){ 119 if(str[i][j] == 'H'){ 120 ++ cnt2; 121 Net.Add(tp1 + cnt2, Net.n + 1, 1, 0, 0); 122 HH[cnt2] = (Position){i, j, tp1 + cnt2}; 123 } 124 } 125 } 126 Solve(); 127 printf("%d\n", Net.MinCostMaxFlow(0, Net.n + 1)); 128 } 129 130 return 0; 131 } POJ 2195/HDU 1533

?

轉載于:https://www.cnblogs.com/sxprovence/p/5106711.html

總結

以上是生活随笔為你收集整理的POJ 2195 Going Home / HDU 1533(最小费用最大流模板)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久国产情侣 | 国产精选一区 | 一二三四区视频 | 国产一区二区麻豆 | 92av视频| 羞羞涩涩网站 | 久久久五月 | 久久片 | 国产一区二区小视频 | 麻豆传媒在线观看视频 | 久久精品国产亚洲av麻豆图片 | 欧美最猛性xxxxx(亚洲精品) | 超碰91人人 | 日本四级电影 | 17c在线观看| 一本一道精品欧美中文字幕 | 久久久久久黄色片 | julia一区二区三区在线观看 | 鲁大师私人影院在线观看 | 爱情岛亚洲论坛入口 | 伊人中文字幕在线 | 亚洲成人av片 | 性饥渴的农村熟妇 | 国产乱国产乱老熟300部视频 | 神马久久香蕉 | 免费日韩精品 | 爱臀av| 茄子视频懂你更多在线观看 | 日本成人社区 | 久久av无码精品人妻出轨 | 亚洲va中文字幕 | 亚洲精品爱爱 | 人人射影院 | 欧美六区 | 97热视频 | 在线中文一区 | 99毛片| 91avcom| 1024欧美| 午夜羞羞羞 | 久久一卡二卡 | 午夜影视在线观看 | 久久av无码精品人妻系列试探 | 天堂中文av在线 | 天天干夜夜拍 | 天堂网视频在线 | 亚洲欧美一区二区三区四区五区 | 国产精品成人一区二区网站软件 | 天天干影院 | 天天想你在线观看完整版电影高清 | 亚洲一级无毛 | 青娱乐在线视频观看 | 老司机深夜福利影院 | av片在线播放 | www四虎精品视频免费网站 | 日韩高清欧美 | 久久美女免费视频 | 丝袜高跟av | 亚洲一区在线播放 | 91久久精品美女高潮 | 国产亚洲精品久久久久久青梅 | 亚洲一区第一页 | 国产免费午夜 | av不卡一区二区 | 国产精品网友自拍 | 国产日产精品一区二区三区四区 | 熟女熟妇伦久久影院毛片一区二区 | 强辱丰满人妻hd中文字幕 | fc2成人免费视频 | 探花视频在线观看 | 蜜臀av一区二区三区 | 中文av一区二区三区 | 黄色片中文字幕 | 内射后入在线观看一区 | 国产又黄又猛的视频 | 爱爱91| 日本黄色免费视频 | 欧美久久一区 | 免费成人在线看 | 中文字幕在线不卡 | 2018天天弄| 国产午夜精品免费一区二区三区视频 | 成人影视免费观看 | 男女啪啪毛片 | 色先锋在线 | 叼嘿视频在线免费观看 | 狠狠爱夜夜爱 | 麻豆视频网 | 国产成人无码精品久在线观看 | 日韩一区免费视频 | 日韩字幕| 亚洲欧美日韩色图 | 天天艹日日艹 | 亚洲av无码一区二区三区性色 | 激情综合区 | www.男人的天堂.com | 精品国产无码一区二区三区 | 天堂av在线网 | 男女扒开双腿猛进入爽爽免费 |