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

posts - 14,  comments - 11,  trackbacks - 0
                                                                                                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
KM算法!

其實這個題求的是最小權匹配,,但有些題目最小不一定好求,于是我們可以換一種思維,將有所的距離變成負的,那么我們要求的就是最大權匹配?。ㄔ谝晃淮笈5闹更c下)
廢話不多說,看程序:
  1 #include<iostream>
  2 using namespace std;
  3 #define Inf 10000000;
  4 int map[105][105];
  5 int slack[105];
  6 int lx[105],ly[105];
  7 bool x[105],y[105];
  8 int link[105];
  9 int n,m;
 10 char mm[105][105];
 11 bool dfs(int v)
 12 {
 13      x[v]=true;
 14      int t;
 15      for (int i=0;i<m;i++)
 16      {
 17          if (!y[i])
 18          {
 19             t=lx[v]+ly[i]-map[v][i];
 20             if (t==0)
 21             {
 22                y[i]=true;
 23                if (link[i]==-1||dfs(link[i]))
 24                {
 25                   link[i]=v;
 26                   return true;
 27                }
 28             }
 29             else slack[i]=min(slack[i],t);
 30          }
 31      }
 32      return false;
 33 }
 34 void KM()
 35 {
 36      int i,j,k;
 37      memset(link,-1,sizeof(link));
 38      for (i=0;i<=m;i++)
 39      {
 40          lx[i]=-Inf;
 41          ly[i]=0;
 42      }
 43      for (i=0;i<m;i++)
 44      {
 45          while (1)
 46          {
 47                memset(x,0,sizeof(x));
 48                memset(y,0,sizeof(y));
 49                
 50                for (j=0;j<m;j++) slack[j]=Inf;
 51                    
 52                if (dfs(i))break;
 53                
 54                int d=Inf;
 55                for (j=0;j<m;j++)
 56                    if (!y[j])d=min(slack[j],d);
 57                    
 58                for (j=0;j<m;j++)
 59                {
 60                    if (x[j])lx[j]-=d;
 61                    if (y[j])ly[j]+=d;
 62                }
 63                for (j=0;j<m;j++)
 64                    if (!y[j])slack[j]-=d;
 65          }
 66      }
 67 }
 68 int main()
 69 {
 70     int i,j,k,t,l,v;
 71     while (cin>>k>>t)
 72     {
 73           if (k+t==0)break;
 74           for (i=1;i<=k;i++)
 75           for (j=1;j<=t;j++)
 76               scanf(" %c",&mm[i][j]);
 77           memset(map,0,sizeof(map));
 78           n=0,m=0;
 79           for (i=1;i<=k;i++)
 80           for (j=1;j<=t;j++)
 81           {
 82               if (mm[i][j]=='H')
 83               {
 84                  n=0;
 85                  for (l=1;l<=k;l++)
 86                  for (v=1;v<=t;v++)
 87                  {
 88                      if (mm[l][v]=='m')
 89                      {
 90                         map[m][n]=-(abs(i-l)+abs(j-v));
 91                         n++;
 92                      }
 93                  }
 94                  m++;
 95               }
 96           }
 97           KM();
 98           int sum=0;
 99           for (i=0;i<m;i++)
100               sum+=map[link[i]][i];
101           cout<<0-sum<<endl;
102     }
103 return 0;
104 }
105  
106 
posted on 2011-04-19 13:54 路修遠 閱讀(1454) 評論(0)  編輯 收藏 引用 所屬分類: 路修遠
<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

轉載,請標明出處!謝謝~~

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

文章檔案

搜索

  •  

最新評論

  • 1.?re: HDU 2433 最短路
  • @test
    的確這組數據應該輸出20的
  • --YueYueZha
  • 2.?re: HDU 2433 最短路
  • 這方法應該不對。 看下面這組數據
    4 4
    1 2
    2 3
    3 4
    2 4

    畫個圖,刪去最后一條邊 2 4 后的結果應該是20,但是此方法的輸出是19
  • --test
  • 3.?re: HDU 2433 最短路
  • ans = ans + sum_u + sum_v - sum[u] - sum[v],
    這個公式不是很理解啊,不知道博主怎么想的啊,謝謝咯
  • --姜
  • 4.?re: HDU 2433 最短路
  • @attacker
    the i-th line is the new SUM after the i-th road is destroyed
  • --路修遠
  • 5.?re: HDU 2433 最短路
  • 你這樣可以AC????刪除<U,V>不僅改變 u,v最短路啊、、、求解
  • --attacker

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩日韩| 欧美色视频日本高清在线观看| 午夜精品久久久久久久白皮肤| 久久久国产精品一区| 国产精品白丝jk黑袜喷水| 亚洲国产午夜| 欧美aa国产视频| 久久av一区二区三区| 国产精品一区二区在线观看| 亚洲一区欧美激情| 亚洲精品乱码久久久久| 亚洲一区二区三区国产| 欧美视频精品在线观看| 亚洲视频高清| 一区二区三区导航| 欧美日韩国产丝袜另类| 日韩亚洲在线| 亚洲日本在线观看| 欧美日韩高清在线播放| 在线视频你懂得一区二区三区| 亚洲国产精品一区二区www在线| 欧美成人乱码一区二区三区| 亚洲精品国产精品乱码不99按摩| 欧美国产精品专区| 欧美激情麻豆| 亚洲桃色在线一区| 亚洲性感激情| 国产亚洲一区二区精品| 久久久久久久精| 久久久青草青青国产亚洲免观| 亚洲国产成人av在线| 亚洲国产天堂久久国产91| 欧美激情一区二区三区在线视频观看| 亚洲人成人一区二区在线观看| 亚洲经典三级| 欧美精品一区二| 久久不射网站| 亚洲国产一区二区视频| 免费不卡亚洲欧美| 午夜国产精品视频| 国产欧美视频在线观看| 久久成人人人人精品欧| 久久久久久久久久久一区| 亚洲第一页自拍| 亚洲国产欧美在线| 欧美性生交xxxxx久久久| 欧美丰满高潮xxxx喷水动漫| 欧美日韩一区二区三| 欧美高潮视频| 99精品欧美一区二区三区 | 亚洲国产精品www| 亚洲激情电影中文字幕| 欧美视频在线观看 亚洲欧| 欧美一区午夜精品| 亚洲精品国产欧美| 亚洲精品视频免费| 国产日韩欧美一区| 欧美激情国产日韩| 国产精品乱子乱xxxx| 欧美大片在线看免费观看| 国产精品yjizz| 欧美激情小视频| 国产欧美精品一区二区三区介绍| 欧美va亚洲va日韩∨a综合色| 欧美午夜视频一区二区| 欧美.com| 国产精品资源| 亚洲经典一区| 亚洲高清在线观看| 亚洲欧美成人在线| 夜夜嗨av一区二区三区| 久久九九精品| 久久www成人_看片免费不卡| 欧美国产三级| 牛牛国产精品| 国产日韩欧美在线观看| 亚洲三级观看| 亚洲高清中文字幕| 久久国产视频网站| 性欧美18~19sex高清播放| 欧美国产亚洲视频| 免费视频一区二区三区在线观看| 国产精品久久久久久五月尺| 亚洲日韩中文字幕在线播放| 亚洲欧洲精品一区| 久久一区免费| 卡通动漫国产精品| 国产真实久久| 亚洲欧美日韩另类精品一区二区三区| 正在播放亚洲| 欧美色欧美亚洲高清在线视频| 亚洲国产欧美一区二区三区同亚洲| 伊人伊人伊人久久| 久久久噜噜噜久久| 欧美+日本+国产+在线a∨观看| 国产一区自拍视频| 欧美一区二区三区免费看| 香蕉成人伊视频在线观看 | 国产欧美精品在线| 亚洲女同在线| 久久精品国产在热久久| 国产性猛交xxxx免费看久久| 亚洲欧美成人网| 欧美激情在线免费观看| 亚洲一区二区四区| 精品999成人| 久久久久久久久久久成人| 欧美成人一区二免费视频软件| 亚洲成色777777女色窝| 免费人成精品欧美精品| 亚洲精品国产精品国自产在线| 亚洲美女视频在线免费观看| 欧美精品电影| 在线一区二区三区四区五区| 午夜精品久久久久久久白皮肤| 国产精品伊人日日| 久久久久久久精| 亚洲精品美女久久久久| 亚洲夜晚福利在线观看| 国产精品视频yy9299一区| 久久精品三级| 亚洲伦理在线观看| 欧美在线视频二区| 亚洲黄色成人| 国产精品毛片一区二区三区 | 久久国产日本精品| 欧美激情精品久久久久久久变态| 一本久久a久久精品亚洲| 国产精品一区三区| 久久亚洲精品伦理| 日韩一区二区精品视频| 久久不见久久见免费视频1| 亚洲东热激情| 国产精品久久久久毛片大屁完整版 | 欧美激情第1页| 国产精品久久久久一区二区三区 | 欧美性大战久久久久久久蜜臀| 午夜精品免费| 亚洲欧洲午夜| 久久蜜桃香蕉精品一区二区三区| 亚洲毛片在线观看| 国产视频精品网| 欧美久久久久| 噜噜噜噜噜久久久久久91| 亚洲影院免费观看| 亚洲激情电影在线| 美国三级日本三级久久99| 亚洲一区高清| 亚洲精品影院| 一区二区在线免费观看| 国产精品豆花视频| 欧美成人三级在线| 欧美一区二区日韩一区二区| 亚洲乱码国产乱码精品精天堂| 蜜桃av噜噜一区| 久久精品国产69国产精品亚洲 | 欧美专区第一页| 99精品99| 亚洲黄色性网站| 国产日韩欧美制服另类| 欧美午夜电影完整版| 久久深夜福利免费观看| 亚洲欧美日韩精品久久久久| 亚洲图片在线观看| 久久久久久精| 日韩系列欧美系列| 欧美福利小视频| 欧美在线免费观看| 日韩一区二区免费高清| 国产一区二区三区的电影| 欧美日韩国产电影| 欧美 日韩 国产在线| 亚洲欧美日韩国产另类专区| 亚洲欧洲精品一区二区三区 | 老巨人导航500精品| 亚洲综合欧美| 在线视频亚洲欧美| 亚洲日本在线视频观看| 国精品一区二区| 国产精品一区二区三区久久| 欧美日韩国产综合在线| 欧美成人在线免费视频| 麻豆精品视频| 美女亚洲精品| 欧美黄色小视频| 欧美激情在线狂野欧美精品| 欧美黄色影院| 欧美日韩高清不卡| 欧美日韩在线高清| 国产精品国码视频| 国产精品久久久久久久电影| 欧美日韩一区二区精品| 欧美日韩综合另类| 国产精品免费久久久久久| 国产精品青草综合久久久久99| 国产九色精品成人porny| 国产三区二区一区久久| 国产午夜精品理论片a级探花 | 亚洲亚洲精品在线观看| 午夜伦欧美伦电影理论片|