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

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 路修遠 閱讀(1454) 評論(0)  編輯 收藏 引用 所屬分類: 路修遠
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

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

常用鏈接

留言簿(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>
            在线一区二区视频| 午夜亚洲福利在线老司机| 国产精品久久久久毛片大屁完整版 | 欧美日韩国产一级| 亚洲风情在线资源站| 亚洲一区二区三区色| 国产婷婷一区二区| 欧美色视频在线| 男女精品网站| 久久九九国产精品| 久久爱www久久做| 美女精品在线| 亚洲午夜一二三区视频| 亚洲日韩成人| 日韩午夜黄色| 亚洲特色特黄| 性高湖久久久久久久久| 亚洲一区二区高清| 欧美一区国产二区| 午夜精品福利一区二区蜜股av| 亚洲精品视频在线观看免费| 韩国av一区二区三区四区| 国产综合精品| 亚洲精品一区二| 在线视频你懂得一区| 亚洲日韩欧美一区二区在线| 亚洲永久视频| 欧美成人国产一区二区| 久久综合网hezyo| 亚洲激情国产精品| 蜜桃伊人久久| 国产精品毛片在线看| 一区二区三区视频在线| 一本色道久久| 久久综合精品一区| 国产亚洲高清视频| 在线亚洲一区| 欧美高清在线精品一区| 欧美国产一区视频在线观看| 欧美三区在线视频| 一本大道久久a久久精品综合| 欧美亚洲一区二区在线| 欧美中文字幕在线播放| 亚洲激情欧美| 亚洲欧美日本视频在线观看| 欧美日韩亚洲在线| 在线观看欧美| 久久久久九九九九| 久久亚洲精品一区| 欧美激情小视频| 国产农村妇女精品| 欧美专区亚洲专区| 亚洲天堂av高清| 久久国产乱子精品免费女| 91久久精品国产91久久性色| 免费成人激情视频| 在线国产精品播放| 久久国产婷婷国产香蕉| 99成人在线| 欧美成年人视频网站欧美| 国产精品系列在线播放| 欧美亚洲一区二区在线观看| 久久av红桃一区二区小说| 久久久久在线观看| 欧美在线观看视频一区二区三区| 国产伦精品一区二区三区在线观看| 中文在线不卡| 在线亚洲欧美专区二区| 激情成人综合| 久久综合婷婷| 久久精品国产精品亚洲精品| 亚洲精品免费电影| 国产一区二区三区在线观看网站| 亚洲电影第1页| 亚洲大片在线| 麻豆久久精品| 亚洲尤物精选| 国产综合色在线| 一本到高清视频免费精品| 久久精品国产亚洲a| 久久先锋资源| 久久精品视频导航| 亚洲欧洲一区二区三区| 99国产精品久久久久久久| 国产精品久久久久秋霞鲁丝| 久久深夜福利免费观看| 国产精品久久久久久久浪潮网站 | 国产精品人成在线观看免费| 免费欧美在线视频| 国产精品网站在线播放| 美女主播视频一区| 国产一区二区在线观看免费播放 | 国产午夜精品一区二区三区视频 | 在线精品观看| 久久成人18免费观看| 午夜视频一区在线观看| 欧美高清hd18日本| 欧美日韩国产综合视频在线| 一区二区日韩| 国产精品人人爽人人做我的可爱| 亚洲性图久久| 欧美在线观看一区| 国产美女搞久久| 在线视频一区观看| 在线成人激情黄色| 欧美bbbxxxxx| 欧美国产国产综合| 久久精品夜色噜噜亚洲aⅴ| 亚洲夜间福利| 精品1区2区3区4区| 亚洲一区国产视频| 日韩一级大片在线| 亚洲深夜福利| 日韩亚洲精品视频| 亚洲欧美日本在线| 亚洲精品少妇30p| 欧美成人精品不卡视频在线观看| 久久精品国产亚洲a| 久久国产精品99国产| 一区二区欧美在线| 亚洲片在线观看| 亚洲视频精选在线| 在线亚洲免费| 中文亚洲欧美| 亚洲视频网站在线观看| 国产一区二区在线观看免费播放| 欧美丰满高潮xxxx喷水动漫| 久久精品国产清高在天天线 | 久久久久久9| 欧美在线播放一区| 久久不射中文字幕| 国产美女精品视频| 亚洲女同同性videoxma| 欧美成人性生活| 国产精品久久久久久久久动漫| 久久久久青草大香线综合精品| 亚洲免费在线看| 免费在线观看一区二区| 欧美国产日韩在线| 国产欧美日韩一区| 亚洲国产成人在线| 亚洲免费在线精品一区| 性做久久久久久免费观看欧美| 欧美亚洲综合另类| 亚洲人成欧美中文字幕| 亚洲欧洲一区二区在线播放| 亚洲综合色婷婷| 欧美三日本三级少妇三2023| 国产精品久久波多野结衣| 亚洲激情婷婷| 久久理论片午夜琪琪电影网| 香蕉久久夜色精品国产| 欧美日韩成人在线观看| 在线国产精品播放| 久久久国产亚洲精品| 亚洲久久成人| 欧美三级电影一区| 亚洲精品国产日韩| 亚洲精品欧美日韩专区| 国产精品porn| 久久综合九色综合欧美就去吻| 美日韩丰满少妇在线观看| 亚洲免费成人av| 久久久久久尹人网香蕉| 亚洲一区二区三区四区中文| 欧美成人午夜免费视在线看片| 久久久久久久久久看片| 国产精品亚洲产品| 亚洲精品网址在线观看| 国产午夜精品视频| 老**午夜毛片一区二区三区| 欧美va天堂| 先锋影音久久| 欧美精品18+| 久久网站热最新地址| 欧美日韩一本到| 久久综合五月天婷婷伊人| 欧美香蕉视频| 91久久精品网| 在线精品国产成人综合| 国产专区欧美精品| 亚洲二区精品| 激情成人综合| 欧美中文字幕精品| 亚洲欧美日韩精品综合在线观看| 久久综合激情| 老司机aⅴ在线精品导航| 国产欧美日韩另类视频免费观看 | 亚洲国产成人精品久久| 中文在线资源观看视频网站免费不卡| 亚洲激情午夜| 久久久五月天| 亚洲国产毛片完整版| 日韩一级大片| 欧美日韩一区二区三区四区五区| 亚洲日本无吗高清不卡| 亚洲夜晚福利在线观看| 欧美日本簧片| 午夜精品久久久久久久久久久久 | 欧美亚州一区二区三区 |