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

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

其實這個題求的是最小權(quán)匹配,,但有些題目最小不一定好求,于是我們可以換一種思維,將有所的距離變成負的,那么我們要求的就是最大權(quán)匹配!(在一位大牛的指點下)
廢話不多說,看程序:
  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 路修遠 閱讀(1457) 評論(0)  編輯 收藏 引用 所屬分類: 路修遠
<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

轉(zhuǎn)載,請標明出處!謝謝~~

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

文章檔案

搜索

  •  

最新評論

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

    畫個圖,刪去最后一條邊 2 4 后的結(jié)果應該是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>
            美女脱光内衣内裤视频久久影院| 亚洲网站在线观看| 久久综合中文| 永久555www成人免费| 美国十次了思思久久精品导航| 久久精品72免费观看| 在线精品国产成人综合| 国产欧美一区二区精品性| 亚洲欧洲av一区二区三区久久| 亚洲特级片在线| 国内精品久久久久久| 美日韩精品视频| 欧美精品在线观看91| 亚洲自拍电影| 久久久精品国产一区二区三区| 亚洲激情一区二区| 在线一区亚洲| 精东粉嫩av免费一区二区三区| 免费在线观看成人av| 欧美日韩大片一区二区三区| 欧美亚洲一区二区在线观看| 久久亚洲二区| 亚洲一区二区三区激情| 欧美一区二区| 日韩视频一区二区三区在线播放| 夜夜精品视频| 伊人天天综合| 中文国产亚洲喷潮| 亚洲国产乱码最新视频| 亚洲视频在线观看三级| 亚洲国产精品久久久久婷婷老年| 亚洲最新在线视频| 亚洲国产cao| 亚洲欧美日本国产专区一区| 91久久夜色精品国产九色| 亚洲中无吗在线| 亚洲精品日日夜夜| 久久激情五月激情| 亚洲一区二区成人在线观看| 久久综合久久久久88| 午夜视频久久久久久| 欧美激情综合在线| 久久综合一区二区| 国产精品尤物| 亚洲另类自拍| 欧美日韩伊人| 亚洲国产片色| 狠狠干综合网| 午夜欧美电影在线观看| 正在播放欧美一区| 欧美成人一区二免费视频软件| 欧美一区二区日韩一区二区| 欧美日韩美女| 亚洲欧洲日产国码二区| 欧美日韩福利视频| 欧美电影免费观看高清| 国产亚洲亚洲| 欧美一区午夜精品| 亚洲欧美日韩在线综合| 午夜视黄欧洲亚洲| 亚洲免费在线| 欧美日韩在线三区| 日韩视频在线观看| 一本色道久久综合| 欧美精品97| 亚洲黄色免费电影| 亚洲精品资源| 欧美国产成人精品| 91久久久久久| 99精品国产热久久91蜜凸| 欧美成人免费全部| 亚洲精品国产精品国自产在线 | 欧美国产大片| 亚洲欧洲综合| 亚洲精品一区二区三| 欧美高清在线观看| 亚洲人成在线播放网站岛国| 亚洲乱码一区二区| 欧美日韩天堂| 亚洲女同精品视频| 久久一区二区三区国产精品| 韩国精品主播一区二区在线观看| 久久国产加勒比精品无码| 另类av一区二区| 亚洲免费激情| 国产精品视频男人的天堂| 香蕉久久夜色精品| 你懂的视频欧美| 亚洲最黄网站| 国产精品日韩欧美一区二区三区| 亚洲欧美日韩在线高清直播| 久久永久免费| 一本久道久久久| 国产日韩欧美一区在线| 噜噜噜在线观看免费视频日韩| 亚洲国产综合视频在线观看| 亚洲一品av免费观看| 韩国欧美一区| 欧美精品一区二区三| 亚洲一区bb| 激情六月婷婷久久| 在线成人激情视频| 亚洲一区亚洲| 一区二区三区 在线观看视频 | 免费欧美日韩| 亚洲人成绝费网站色www| 久久亚洲综合色| 欧美国产乱视频| 国产伦精品一区二区三| 亚洲大片精品永久免费| 一区二区三区视频在线观看| 国产区欧美区日韩区| 欧美福利小视频| 欧美一区日韩一区| 国产精品99久久久久久宅男| 狠狠久久婷婷| 欧美成人免费网站| 午夜欧美电影在线观看| 亚洲国产一区二区精品专区| 欧美伊人久久久久久久久影院| 亚洲精品一级| 黄色av一区| 国产乱人伦精品一区二区| 欧美国产日韩一二三区| 久久久www成人免费无遮挡大片| 亚洲精品乱码| 欧美高清视频免费观看| 久久国产乱子精品免费女 | 欧美激情一区在线| 久久精品导航| 亚洲欧美日韩国产成人| 日韩视频在线一区二区三区| 欧美黄色视屏| 久久综合伊人77777蜜臀| 欧美一区二区三区播放老司机| 一本一本久久a久久精品综合妖精| 亚洲第一视频网站| 激情成人综合| 一区二区三区在线高清| 国产欧美一区二区精品仙草咪 | 欧美黄色大片网站| 免费久久99精品国产自| 久久夜精品va视频免费观看| 欧美一区二区三区四区视频| 亚洲欧美日韩中文播放| 亚洲欧美激情在线视频| 中日韩视频在线观看| 亚洲视频福利| 亚洲一区在线观看免费观看电影高清| 日韩视频永久免费| 中日韩视频在线观看| 亚洲视频久久| 欧美亚洲视频| 久久久7777| 欧美大片在线看免费观看| 欧美成人按摩| 欧美日韩综合视频| 国产精品专区第二| 国产一区视频在线观看免费| 黄色成人精品网站| 最新亚洲电影| 亚洲视频在线观看三级| 亚洲欧美视频在线| 久久精品一二三区| 免费一级欧美片在线播放| 欧美激情视频在线免费观看 欧美视频免费一 | 夜夜嗨av一区二区三区| 亚洲午夜影视影院在线观看| 亚洲欧美伊人| 久久人人97超碰精品888| 欧美激情精品久久久久久变态| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品亚洲人在线观看| 国产偷国产偷精品高清尤物| 尤物在线精品| 一本色道精品久久一区二区三区 | 亚洲国产一二三| 亚洲尤物影院| 老司机午夜精品视频| 亚洲日本中文字幕区| 亚洲综合另类| 亚洲一区二区高清| 一本色道婷婷久久欧美| 国内精品久久久| 亚洲国产99| 亚洲免费婷婷| 蜜桃av久久久亚洲精品| 一本一道久久综合狠狠老精东影业 | 日韩一级免费观看| 欧美在线一级va免费观看| 欧美成年人视频| 亚洲天堂网在线观看| 老色鬼精品视频在线观看播放| 欧美性猛交视频| 亚洲人成网站777色婷婷| 欧美综合激情网| 一本色道久久88亚洲综合88| 久久久久国色av免费看影院 | 欧美日韩不卡在线| 一区二区在线视频|