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

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算法!

其實這個題求的是最小權匹配,,但有些題目最小不一定好求,于是我們可以換一種思維,將有所的距離變成負的,那么我們要求的就是最大權匹配!(在一位大牛的指點下)
廢話不多說,看程序:
  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 路修遠 閱讀(1462) 評論(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>
            亚洲欧美精品suv| 午夜精品福利视频| 麻豆成人91精品二区三区| 亚洲欧美日韩系列| 国产日韩欧美高清免费| 欧美一区激情| 欧美一级淫片播放口| 国产欧美婷婷中文| 另类av一区二区| 免费观看国产成人| 9久草视频在线视频精品| 日韩网站在线| 国产日产高清欧美一区二区三区| 久久高清一区| 嫩模写真一区二区三区三州| 日韩一级二级三级| 一区二区三区四区五区精品视频| 国产精品一级在线| 欧美大片在线观看一区| 欧美日韩成人综合| 久久久精品一品道一区| 免费91麻豆精品国产自产在线观看| 99日韩精品| 香蕉久久久久久久av网站| 亚洲高清一二三区| 亚洲午夜激情网站| 在线观看日韩一区| 亚洲视频在线一区观看| 在线成人av.com| 亚洲视频一二| 亚洲精品视频啊美女在线直播| 亚洲美女免费精品视频在线观看| 国产精品自在线| 亚洲人成高清| 激情欧美亚洲| 亚洲天堂成人在线观看| 亚洲国产精品久久久久婷婷老年| 一区二区精品在线| 亚洲欧洲在线免费| 久久精品99国产精品日本| 亚洲免费视频中文字幕| 欧美激情二区三区| 久久久久久亚洲精品中文字幕| 欧美日韩成人综合在线一区二区| 玖玖综合伊人| 国产欧美一区二区精品性色| 日韩视频一区二区三区在线播放| 韩国精品在线观看| 亚洲综合二区| 亚洲一区二区成人| 欧美激情在线播放| 亚洲第一页中文字幕| 激情欧美一区二区三区| 亚洲欧美一区二区三区在线| 亚洲天堂免费观看| 欧美日韩人人澡狠狠躁视频| 91久久精品国产91性色tv| 精品动漫一区二区| 欧美一区二区播放| 欧美在线免费观看| 国产精品自拍网站| 亚洲字幕一区二区| 午夜一区二区三区在线观看| 欧美午夜大胆人体| 一区二区三区免费看| 亚洲视频一区二区| 欧美性久久久| 亚洲愉拍自拍另类高清精品| 亚洲综合精品四区| 国产精品毛片在线| 亚洲视频你懂的| 香蕉成人伊视频在线观看| 国产精品麻豆成人av电影艾秋| 亚洲视频在线看| 欧美在线观看日本一区| 国产女主播一区| 久久久成人精品| 欧美国产亚洲另类动漫| 亚洲精品一区二区三区婷婷月| 欧美fxxxxxx另类| 日韩午夜一区| 欧美与黑人午夜性猛交久久久| 国产一区二区av| 久久综合图片| 亚洲精品久久7777| 亚洲欧美精品在线| 国产亚洲欧美一区二区| 久久人人97超碰国产公开结果| 欧美激情四色| 亚洲欧美国产毛片在线| 国产一区二区中文| 欧美黄色视屏| 亚洲一区欧美二区| 欧美成人国产va精品日本一级| 亚洲乱码国产乱码精品精98午夜| 欧美日韩一区国产| 欧美中文字幕在线观看| 亚洲国产精品嫩草影院| 亚洲一区二区三区涩| 国产亚洲午夜高清国产拍精品| 老牛国产精品一区的观看方式| 亚洲美女在线视频| 久久久久女教师免费一区| 亚洲激情网站免费观看| 国产精品一区二区久久| 麻豆av一区二区三区久久| 一本色道**综合亚洲精品蜜桃冫| 久久久久国产精品一区| 99v久久综合狠狠综合久久| 国产精品美女久久久久久久| 久久婷婷一区| 午夜精品免费| 亚洲美女电影在线| 玖玖在线精品| 欧美一区二区三区的| 99re热这里只有精品视频 | 免费观看日韩av| 亚洲一区二区3| 亚洲高清色综合| 国产视频一区在线| 欧美日韩一视频区二区| 久久噜噜噜精品国产亚洲综合| 一区二区三区国产盗摄| 91久久在线观看| 欧美jizzhd精品欧美巨大免费| 欧美一区免费| 亚洲男人的天堂在线aⅴ视频| 日韩午夜在线视频| 亚洲国产日韩欧美| 黄色成人精品网站| 国产日韩欧美综合| 国产精品久久久| 国产精品h在线观看| 欧美激情按摩在线| 欧美大片一区| 欧美黄色一区二区| 欧美成人一区在线| 欧美14一18处毛片| 欧美aaa级| 欧美成人按摩| 欧美激情一区二区三区在线| 免费观看亚洲视频大全| 免播放器亚洲一区| 欧美大片免费| 欧美日韩精品综合| 欧美日韩综合不卡| 欧美亚韩一区| 国产精品专区h在线观看| 国产精品视频免费观看www| 国产精品久久久久久久久借妻 | 久久在线免费观看| 久久久久免费观看| 久久在线免费| 欧美高清免费| 欧美日韩综合久久| 国产精品电影观看| 国产女主播一区二区| 国一区二区在线观看| 在线观看精品视频| 亚洲精品在线视频| 亚洲综合色丁香婷婷六月图片| 欧美一区二区三区视频在线观看 | 亚洲视频久久| 午夜精品美女自拍福到在线| 久久国产精品黑丝| 欧美 日韩 国产在线| 亚洲欧洲精品一区| 亚洲午夜一区| 久久夜色精品国产亚洲aⅴ| 欧美久久一区| 国产欧美一区二区色老头| 一区在线影院| 中国亚洲黄色| 久久天天躁狠狠躁夜夜爽蜜月| 欧美99久久| 亚洲一区二区三区精品在线| 久久精品成人一区二区三区| 欧美国产视频在线| 国产精品羞羞答答| 91久久精品国产91久久性色tv| 亚洲性视频网址| 牛人盗摄一区二区三区视频| 99国产麻豆精品| 久久久xxx| 国产精品国产三级国产aⅴ无密码| 国产一区二区三区不卡在线观看| 亚洲日本中文字幕| 久久精品青青大伊人av| 亚洲免费观看高清在线观看 | 亚洲一区二区三区午夜| 久久久久久久综合日本| 国产精品国产三级国产| 在线国产日韩| 久久gogo国模裸体人体| 欧美激情一区二区三区在线| 亚洲免费网站| 欧美日韩国产一级| 亚洲高清av| 久久人人97超碰国产公开结果 | 亚洲电影下载|