青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

POJ 2195 Going Home 二分圖完美匹配

Description

On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man, you need to pay a $1 travel fee for every step he moves, until he enters a house. The task is complicated with the restriction that each house can accommodate only one little man.

Your task is to compute the minimum amount of money you need to pay in order to send these n little men into those n different houses. The input is a map of the scenario, a '.' means an empty space, an 'H' represents a house on that point, and am 'm' indicates there is a little man on that point.

You can think of each point on the grid map as a quite large square, so it can hold n little men at the same time; also, it is okay if a little man steps on a grid with a house without entering that house.

Input

There are one or more test cases in the input. Each case starts with a line giving two integers N and M, where N is the number of rows of the map, and M is the number of columns. The rest of the input will be N lines describing the map. You may assume both N and M are between 2 and 100, inclusive. There will be the same number of 'H's and 'm's on the map; and there will be at most 100 houses. Input will terminate with 0 0 for N and M.

Output

For each test case, output one line with the single integer, which is the minimum amount, in dollars, you need to pay.

Sample Input

2 2
.m
H.
5 5
HH..m
.....
.....
.....
mm..H
7 8
...H....
...H....
...H....
mmmHmmmm
...H....
...H....
...H....
0 0

Sample Output

2
10
28

Source


    題目大意:有m個(gè)人要進(jìn)h間房子,從當(dāng)前位置(x1,y1)進(jìn)入房子(x2,y2)的時(shí)間為|x1-x2|+|y1-y2|,問這m個(gè)人都進(jìn)入房間所需的最小時(shí)間是多少。問題可以轉(zhuǎn)化為帶權(quán)二分圖的最小權(quán)匹配,以sample 2為例先建立二分圖:
 
(m1,h1)=4,(m1,h2)=3,(m1,h3)=4,(m2,h1)=4,(m2,h2)=5,(m2,h3)=4,(m3,h1)=5,(m3,h2)=4,(m3,h3)=3.
然后用KM算法求解,代碼中的注釋部分為最大權(quán)匹配。
#include <iostream>

const int MAX = 101;
const int MAXN = 10001;
const int inf = 0x7FFFFFFF;
struct point{
    
int x,y;
}
man[MAXN],home[MAXN];
bool vx[MAX],vy[MAX];
int m,h,map[MAX][MAXN],lx[MAX],ly[MAX],match[MAX];

bool dfs(int u){
    
int i;
    
for(vx[u]=true,i=0;i<h;i++)
        
if(!vy[i] && lx[u]+ly[i]==map[u][i]){
            vy[i]
=true;
            
if(match[i]==-1 || dfs(match[i])){
                match[i]
=u;
                
return true;
            }

        }

    
return false;
}

int kuhn_munkras(){
    
int i,j,k,min,ans;
    
for(i=0;i<m;i++)
        
for(lx[i]=inf,j=0;j<h;j++)
            
if(map[i][j]<lx[i]) lx[i]=map[i][j];
  
//for(i=0;i<m;i++)
  
//    for(lx[i]=-inf,j=0;j<h;j++)
  
//        if(map[i][j]>lx[i]) lx[i]=map[i][j]; 最大權(quán)匹配
    for(i=0;i<h;i++) ly[i]=0;
    memset(match,
-1,sizeof(match));
    
for(i=0;i<m;i++){
        
while(true){
            memset(vx,
false,sizeof(vx));
            memset(vy,
false,sizeof(vy));
            min
=inf;
            
if(dfs(i)) break;
            
for(j=0;j<m;j++){
                
if(vx[j]){
                    
for(k=0;k<h;k++)
                        
if(!vy[k] && map[j][k]-lx[j]-ly[k]<min)
                            min
=map[j][k]-lx[j]-ly[k];
                      
//if(!vy[k] && lx[j]+ly[k]-map[j][k]<min)
                      
//    min=map[j][k]-lx[j]-ly[k]; 最大權(quán)匹配
                }

            }

            
for(j=0;j<m;j++if(vx[j]) lx[j]+=min;
            
for(j=0;j<h;j++if(vy[j]) ly[j]-=min;
        }

    }

    
for(ans=i=0;i<h;i++) ans+=map[match[i]][i];
    
return ans;
}

int main(){
    
char ch;
    
int i,j,row,colum;
    
while(scanf("%d %d",&row,&colum),row||colum){
        
for(getchar(),m=h=i=0;i<row;i++){
            
for(j=0;j<colum;j++){
                ch
=getchar();
                
if(ch=='m')
                    man[m].x
=i,man[m].y=j,m++;
                
else if(ch=='H')
                    home[h].x
=i,home[h].y=j,h++;
            }

            getchar();
        }

        memset(map,
0,sizeof(map));
        
for(i=0;i<m;i++)
            
for(j=0;j<h;j++)
                map[i][j]
=abs(man[i].x-home[j].x)+abs(man[i].y-home[j].y);
        printf(
"%d\n",kuhn_munkras());
    }

    
return 0;
}

posted on 2009-06-03 12:45 極限定律 閱讀(824) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

友情鏈接

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产高清| 国产日韩欧美夫妻视频在线观看| 在线免费观看一区二区三区| 久久香蕉精品| 久久在线视频在线| 亚洲精品日韩精品| 99精品视频免费在线观看| 欧美日韩亚洲精品内裤| 亚洲欧美卡通另类91av| 欧美亚洲在线观看| 伊人成人网在线看| 亚洲裸体俱乐部裸体舞表演av| 欧美日韩在线视频一区二区| 销魂美女一区二区三区视频在线| 亚洲视频图片小说| 极品尤物久久久av免费看| 欧美国产在线视频| 国产精品白丝黑袜喷水久久久| 久久精彩视频| 欧美精品一线| 久久高清国产| 欧美激情91| 久久成人av少妇免费| 老司机午夜精品视频| 亚洲视频欧美在线| 久久国产精品一区二区| 亚洲人精品午夜在线观看| 亚洲天堂免费在线观看视频| 国语自产精品视频在线看抢先版结局 | 亚洲国产一区在线观看| 欧美日韩在线三级| 老司机成人在线视频| 欧美日韩国产在线一区| 久久先锋资源| 国产精品久久久久久久久免费樱桃| 久久久国产亚洲精品| 欧美日韩成人一区| 久久天天躁夜夜躁狠狠躁2022| 欧美国产日本高清在线| 久久久青草婷婷精品综合日韩| 欧美剧在线观看| 裸体素人女欧美日韩| 国产精品美腿一区在线看| 亚洲成人直播| 黄色av成人| 亚洲免费视频观看| 亚洲在线免费观看| 欧美激情精品久久久久久| 久久伊人亚洲| 国产日韩欧美日韩大片| 一区二区三区久久| 99re6这里只有精品| 老司机精品导航| 老司机成人在线视频| 国产视频精品va久久久久久| 亚洲视频在线播放| 一区二区三区波多野结衣在线观看| 久久综合伊人77777| 久久综合五月| 国产一区二区日韩精品欧美精品| 一区二区三区日韩| 亚洲影院在线观看| 国产精品久久久久久影视| 亚洲精品国产精品乱码不99 | 国产精品视频你懂的| 99国产一区二区三精品乱码| 亚洲精品一品区二品区三品区| 久久综合久久综合久久综合| 久久蜜桃香蕉精品一区二区三区| 国产亚洲精品一区二555| 亚洲欧美日产图| 久久aⅴ乱码一区二区三区| 国产精品欧美久久| 亚洲欧美一区在线| 久久国产一二区| 一区二区三区自拍| 美女999久久久精品视频| 欧美黑人多人双交| 99re8这里有精品热视频免费 | 久久久久国产精品午夜一区| 麻豆91精品| 亚洲精品免费一二三区| 欧美精品123区| 一区二区三区欧美| 性色一区二区三区| 一区三区视频| 欧美a级片网站| 亚洲精品欧美在线| 香蕉久久一区二区不卡无毒影院| 国产乱码精品一区二区三区五月婷 | 欧美一级视频精品观看| 国产精品婷婷午夜在线观看| 久久av最新网址| 亚洲第一页中文字幕| 中国av一区| 国内激情久久| 欧美黄色成人网| 亚洲视频二区| 免费成人美女女| 亚洲一区二区三区四区中文| 国产亚洲电影| 欧美精品一区二区蜜臀亚洲| 亚洲自拍高清| 亚洲高清在线播放| 欧美资源在线观看| 亚洲欧洲三级| 国产欧美综合一区二区三区| 欧美不卡在线视频| 先锋资源久久| 亚洲美女视频在线免费观看| 久久久噜噜噜| 制服诱惑一区二区| 亚洲国产高清自拍| 国产精品视频一二| 欧美精品在线一区二区| 久久国产高清| 亚洲网站视频福利| 亚洲黄色在线观看| 久久在线观看视频| 亚洲一级黄色片| 亚洲精品久久久蜜桃| 国产在线精品二区| 国产精品久久久久久av下载红粉| 久久综合狠狠综合久久综合88| 亚洲综合第一页| 一本色道久久99精品综合 | av不卡在线观看| 精品福利av| 国产三级欧美三级| 国产精品美女久久久| 欧美日韩一区精品| 欧美高清视频一二三区| 久久久综合视频| 久久久国产精彩视频美女艺术照福利 | 久久精视频免费在线久久完整在线看 | 欧美色欧美亚洲另类二区| 你懂的成人av| 久久综合伊人77777蜜臀| 久久经典综合| 久久精品在线观看| 久久国产精品久久久久久久久久| 亚洲一区亚洲二区| 亚洲一区二区黄色| 亚洲一区二区三区免费在线观看| 99国产精品视频免费观看| 亚洲精选一区| 亚洲人成毛片在线播放| 亚洲人妖在线| 亚洲精品一区中文| 99视频一区| 亚洲一二三区在线观看| 亚洲女优在线| 久久大香伊蕉在人线观看热2| 性欧美xxxx大乳国产app| 欧美一区免费| 麻豆精品在线视频| 欧美不卡一区| 欧美体内谢she精2性欧美| 欧美午夜剧场| 国产亚洲欧洲| 亚洲国内高清视频| 在线亚洲一区| 欧美一级二区| 欧美成人dvd在线视频| 91久久国产综合久久蜜月精品 | 欧美在线视频免费播放| 久久精品夜夜夜夜久久| 母乳一区在线观看| 亚洲精品视频一区| 亚洲欧美视频一区二区三区| 久久久久综合网| 欧美人与性禽动交情品 | 欧美日韩精品一区二区在线播放 | 亚洲欧美日韩精品久久亚洲区| 性亚洲最疯狂xxxx高清| 久久天天躁狠狠躁夜夜av| 亚洲国产激情| 亚洲欧美日韩成人| 欧美jizzhd精品欧美巨大免费| 国产精品ⅴa在线观看h| 国内精品伊人久久久久av影院 | 在线天堂一区av电影| 欧美在线二区| 91久久精品国产91久久性色| 中国成人亚色综合网站| 久久国产综合精品| 欧美视频一区二区在线观看| 精东粉嫩av免费一区二区三区| 一区二区欧美亚洲| 老司机免费视频一区二区| 日韩视频在线观看免费| 久久久久久日产精品| 国产精品地址| 亚洲欧洲精品天堂一级| 欧美制服丝袜第一页| 亚洲美女精品成人在线视频| 久久精品国产精品亚洲综合| 欧美午夜剧场| aa日韩免费精品视频一| 欧美激情欧美激情在线五月|