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

posts - 43,  comments - 9,  trackbacks - 0
BFS實現,O(n^3)
  1 #include <iostream>
  2 using namespace std;
  3 const int SIZE=110;
  4 const int INF=0x7fffffff;
  5 int w[SIZE][SIZE],lx[SIZE],ly[SIZE],sx,sy;
  6 int match[SIZE],pax[SIZE],pay[SIZE],slack[SIZE];
  7 bool x[SIZE],y[SIZE];
  8 int N,M;
  9 struct Coord{
 10     int r,c;
 11 };
 12 
 13 inline void clear(){
 14     memset(x,0,sizeof(x));
 15     memset(y,0,sizeof(y));
 16     memset(pax,0,sizeof(pax));
 17     memset(pay,0,sizeof(pay));
 18     fill(slack,slack+SIZE,INF);
 19 }
 20 
 21 bool bfs(int r){
 22     int i,j,k;
 23     int tag,que[SIZE*2],pq=0,sq=1;
 24     que[0]=r<<1; x[r]=true;
 25     while(pq<sq){
 26         tag=que[pq]&1; k=que[pq]>>1;
 27         if(tag==0){//look for the start vex of bolt edge
 28             for(i=1;i<=sy;i++){
 29                 if(y[i])continue;
 30                 if(lx[k]+ly[i]==w[k][i]){
 31                     y[i]=true; pay[i]=k;
 32                     if(!match[i]){  //agument
 33                         for(j=i;j;j=pax[pay[j]]){
 34                             match[j]=pay[j];
 35                         }
 36                         return true;
 37                     }
 38                     else{
 39                         que[sq++]=(i<<1)|(tag^1);
 40                     }
 41                 }
 42                 else{
 43                     slack[i]=min(slack[i],lx[k]+ly[i]-w[k][i]);
 44                 }
 45             }
 46         }
 47         else//go along its matched edge!
 48             x[match[k]]=true;
 49             pax[match[k]]=k;
 50             que[sq++]=(match[k]<<1)|(tag^1);
 51         }
 52         pq++;
 53     }
 54     return false;
 55 }
 56 
 57 int solve(){
 58     int i,j,k;
 59     memset(lx,0,sizeof(lx));
 60     memset(ly,0,sizeof(ly));
 61     memset(match,0,sizeof(match));
 62     
 63     for(i=1;i<=sx;i++){
 64         for(j=1;j<=sy;j++){
 65             lx[i]=max(lx[i],w[i][j]);
 66         }
 67     }
 68     clear();
 69     for(i=1;i<=sx;i++){
 70         int r=i;
 71         while(1){
 72             if(bfs(r)){
 73                 clear();
 74                 break;
 75             }
 76             int d=INF,ty;
 77             for(j=1;j<=sy;j++){
 78                 if(!y[j] && slack[j]<d){
 79                     d=slack[j];
 80                     ty=j;
 81                 }
 82             }
 83             for(j=1;j<=sx;j++){
 84                 if(x[j]){
 85                     lx[j]-=d;
 86                     if(lx[j]+ly[ty]==w[j][ty]){ //look for ty's rear v in X
 87                         r=j; //reuse search tree of last bfs
 88                     }
 89                 }
 90             }
 91             for(j=1;j<=sy;j++){
 92                 if(y[j]){
 93                     ly[j]+=d;
 94                 }
 95                 slack[j]-=d;
 96             }
 97         }
 98     }
 99     int ans=0;
100     for(i=1;i<=sy;i++){
101         ans+=SIZE*2-w[match[i]][i];
102     }
103     return ans;
104 }
105 
106 int main(){
107     //freopen("out_b3.txt","w",stdout);
108     int i,j;
109     char str[SIZE];
110     Coord cx[SIZE],cy[SIZE];
111     while(scanf("%d%d\n",&N,&M)!=EOF && M*N){
112         memset(w,0,sizeof(w));
113         sx=0;sy=0;
114         for(i=0;i<N;i++){
115             gets(str);
116             for(j=0;j<M;j++){
117                 if(str[j]=='H'){
118                     sy++;
119                     cy[sy].r=i;
120                     cy[sy].c=j;
121                 }
122                 else if(str[j]=='m'){
123                     sx++;
124                     cx[sx].r=i;
125                     cx[sx].c=j;
126                 }
127             }
128         }
129         for(i=1;i<=sx;i++){
130             for(j=1;j<=sy;j++){
131                 w[i][j]=SIZE*2-(abs(cx[i].r-cy[j].r)+abs(cx[i].c-cy[j].c));
132             }
133         }
134         printf("%d\n",solve());
135     }
136     return 0;
137 }


DFS實現,O(n^4)
 1 #include <iostream>
 2 using namespace std;
 3 const int SIZE=110;
 4 const int INF=0x7fffffff;
 5 int w[SIZE][SIZE],lx[SIZE],ly[SIZE],sx,sy,match[SIZE];
 6 bool x[SIZE],y[SIZE];
 7 int N,M;
 8 struct Coord{
 9     int r,c;
10 };
11 
12 bool dfs(int k){
13     x[k]=true;
14     for(int i=1;i<=sy;i++){
15         if(!y[i] && lx[k]+ly[i]==w[k][i]){
16             y[i]=true;
17             if(!match[i] || dfs(match[i])){
18                 match[i]=k;
19                 return true;
20             }
21         }
22     }
23     return false;
24 }
25 
26 int solve(){
27     int i,j,k;
28     memset(ly,0,sizeof(ly));
29     memset(lx,0,sizeof(lx));
30     memset(match,0,sizeof(match));
31     for(i=1;i<=sx;i++){
32         for(j=1;j<=sy;j++){
33             lx[i]=max(lx[i],w[i][j]);
34         }
35     }
36     for(i=1;i<=sx;i++){
37         while(1){
38             memset(x,0,sizeof(x));
39             memset(y,0,sizeof(y));
40             if(dfs(i))break;
41             int d=INF;
42             for(j=1;j<=sx;j++){
43                 if(x[j]){
44                     for(k=1;k<=sy;k++){
45                         if(!y[k]){
46                             d=min(d,lx[j]+ly[k]-w[j][k]);
47                         }
48                     }
49                 }
50             }
51             for(j=1;j<=sx;j++){
52                 if(x[j]) lx[j]-=d;
53             }
54             for(j=1;j<=sy;j++){
55                 if(y[j]) ly[j]+=d;
56             }
57         }
58     }
59     int ans=0;
60     for(i=1;i<=sy;i++){
61         ans+=SIZE*2-w[match[i]][i];
62     }
63     return ans;
64 }
65 
66 int main(){
67     int i,j;
68     char str[SIZE];
69     Coord cx[SIZE],cy[SIZE];
70     while(scanf("%d%d\n",&N,&M)!=EOF && M*N){
71         memset(w,0,sizeof(w));
72         sx=0;sy=0;
73         for(i=0;i<N;i++){
74             gets(str);
75             for(j=0;j<M;j++){
76                 if(str[j]=='H'){
77                     sy++;
78                     cy[sy].r=i;
79                     cy[sy].c=j;
80                 }
81                 else if(str[j]=='m'){
82                     sx++;
83                     cx[sx].r=i;
84                     cx[sx].c=j;
85                 }
86             }
87         }
88         for(i=1;i<=sx;i++){
89             for(j=1;j<=sy;j++){
90                 w[i][j]=SIZE*2-(abs(cx[i].r-cy[j].r)+abs(cx[i].c-cy[j].c));
91             }
92         }
93         
94         printf("%d\n",solve());
95     }
96     return 0;
97 }


posted on 2009-02-15 22:10 wolf5x 閱讀(320) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpc
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

"Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

留言簿(3)

隨筆分類(59)

隨筆檔案(43)

cows

搜索

  •  

最新評論

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区三区男人的天堂| 久久久久国产精品厨房| 亚洲人成毛片在线播放女女| 欧美一级视频精品观看| 亚洲看片网站| 欧美大片免费久久精品三p| 国产亚洲一区二区在线观看| 亚洲欧美日韩中文视频| 一本到12不卡视频在线dvd| 欧美成人精品不卡视频在线观看| 狠狠色狠色综合曰曰| 久久黄色网页| 性18欧美另类| 国产一区二区久久久| 欧美一区二区三区免费视| 亚洲私人黄色宅男| 国产精品日韩精品| 欧美在线关看| 欧美亚洲免费| 狠色狠色综合久久| 母乳一区在线观看| 欧美成人精品不卡视频在线观看| **欧美日韩vr在线| 欧美激情亚洲视频| 免费看亚洲片| 亚洲私拍自拍| 欧美亚洲日本国产| 在线国产精品一区| 亚洲国产精品一区制服丝袜| 麻豆精品视频在线观看| 亚洲精品一品区二品区三品区| 亚洲福利视频免费观看| 欧美日韩国产va另类| 亚洲专区一区| 久久精品官网| 99视频精品在线| 亚洲在线1234| 亚洲电影激情视频网站| 亚洲另类在线视频| 国产农村妇女毛片精品久久麻豆| 久久久99爱| 欧美经典一区二区三区| 午夜在线视频观看日韩17c| 久久久久久9999| 亚洲午夜极品| 亚洲免费综合| 欧美高清在线精品一区| 欧美日韩免费观看一区=区三区 | 亚洲最快最全在线视频| 亚洲午夜视频在线| 亚洲高清123| 亚洲视频一二区| 在线日韩av片| 亚洲四色影视在线观看| 最新日韩在线| 校园激情久久| 亚洲午夜精品视频| 麻豆精品视频在线观看| 久久久激情视频| 欧美色综合网| 亚洲国产一区二区a毛片| 国产亚洲aⅴaaaaaa毛片| 亚洲国产美国国产综合一区二区| 国产精品午夜在线观看| 亚洲乱码国产乱码精品精98午夜| 韩国av一区二区| 亚洲性图久久| 中国成人在线视频| 欧美高清视频一区二区| 老司机精品视频网站| 国产精品福利在线观看| 91久久综合亚洲鲁鲁五月天| 黄网站免费久久| 午夜天堂精品久久久久| 亚洲影视九九影院在线观看| 欧美搞黄网站| 欧美wwwwww| 狠狠色综合色区| 欧美在线|欧美| 欧美主播一区二区三区| 国产精品啊v在线| 亚洲美女在线观看| 99re6热在线精品视频播放速度| 久久久久在线| 免费的成人av| 亚洲电影在线| 久久在线免费观看| 裸体歌舞表演一区二区 | 欧美黄色一区| 悠悠资源网亚洲青| 久久久久久久久岛国免费| 久久黄色小说| 国模私拍一区二区三区| 欧美一区二区三区精品| 久久久久久久精| 好看的av在线不卡观看| 亚洲第一福利视频| 欧美资源在线观看| 欧美日韩亚洲在线| 亚洲国产精品免费| 亚洲人www| 欧美黑人多人双交| 亚洲精品中文字| 亚洲视频观看| 国产精品任我爽爆在线播放 | 欧美成人一区二区在线| 极品尤物av久久免费看| 亚洲精品一品区二品区三品区| 亚洲精品婷婷| 欧美激情1区2区3区| 亚洲精品乱码| 亚洲性感美女99在线| 国产精品欧美日韩| 欧美一级二级三级蜜桃| 美国十次了思思久久精品导航| 亚洲福利电影| 欧美日韩日本国产亚洲在线| 99精品国产在热久久婷婷| 香蕉成人伊视频在线观看 | 一区二区三区成人| 国产精品日韩欧美一区二区三区 | 国产亚洲精品v| 久久久免费精品| 亚洲乱码日产精品bd| 午夜在线一区| 亚洲国产天堂久久综合| 欧美视频网址| 欧美在线影院| 日韩视频在线你懂得| 欧美一区午夜视频在线观看| 亚洲国产精品久久久久婷婷老年| 欧美欧美全黄| 欧美专区在线观看| 亚洲免费观看| 麻豆精品在线播放| 亚洲一区二区免费视频| 狠狠色综合色区| 欧美午夜视频一区二区| 久久嫩草精品久久久精品一| 一本色道精品久久一区二区三区| 久久久国际精品| 亚洲特级片在线| 亚洲国产精品va在看黑人| 国产精品亚洲一区| 欧美精品免费在线| 久久久久久电影| 亚洲欧美日韩国产一区二区三区 | 久久综合久久久久88| 亚洲一区二区三区在线看| 亚洲第一视频| 久久久久综合网| 亚洲欧美日韩国产成人| 日韩视频免费观看高清完整版| 国产视频欧美| 国产精品久久久久久av福利软件| 免费成人性网站| 久久国产精品电影| 亚洲欧美日韩一区二区| 99精品国产一区二区青青牛奶| 欧美成人激情在线| 久久人人97超碰精品888| 欧美在现视频| 午夜视频久久久久久| 亚洲一区精品视频| 在线视频欧美日韩| 99国产精品久久久久久久久久| 尤物网精品视频| 红桃视频亚洲| 国产综合亚洲精品一区二| 国产精品一二三四| 国产精品美女黄网| 国产精品久久久久久久久免费桃花| 欧美精品色网| 欧美绝品在线观看成人午夜影视| 欧美岛国激情| 欧美成人免费一级人片100| 小辣椒精品导航| 国产精品视频999| 国产精品v欧美精品v日韩精品| 欧美精品一区在线| 欧美日韩亚洲免费| 欧美日韩国产区| 欧美日韩视频专区在线播放| 欧美日韩国产精品自在自线| 欧美日韩的一区二区| 欧美午夜在线观看| 国产精品久久久久久久久久久久| 欧美视频亚洲视频| 国产精品视频| 狠狠操狠狠色综合网| 亚洲电影免费在线观看| 亚洲精品综合精品自拍| 在线视频精品| 欧美资源在线观看| 免费观看一区| 亚洲日本乱码在线观看| 中国成人在线视频| 久久精品99国产精品| 欧美高清视频| 国产精品日韩欧美一区二区|