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

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
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

"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>
            一区二区三区日韩精品| 亚洲欧美成人精品| 亚洲区中文字幕| 国产精品一区二区你懂的| 日韩亚洲欧美一区| 亚洲精品国精品久久99热| 久久久一区二区三区| 久久精品亚洲一区二区| 国产精品久久久999| 日韩亚洲精品视频| 亚洲手机成人高清视频| 欧美日韩免费观看一区三区| 亚洲激情成人网| 亚洲精品综合久久中文字幕| 欧美/亚洲一区| 欧美激情国产日韩精品一区18| 亚洲盗摄视频| 美女91精品| 亚洲欧洲精品一区| 一区二区三区产品免费精品久久75 | 日韩视频在线一区二区三区| 欧美精品一区二区三区视频| 亚洲精品美女| 亚洲无线视频| 国产精品人成在线观看免费| 欧美伊人精品成人久久综合97| 亚洲国产成人在线视频| 亚洲欧美日韩在线播放| 亚洲精品视频免费观看| 亚洲日韩成人| 日韩一级片网址| 亚洲自拍电影| 久久黄色小说| 免费日韩av| 久久超碰97中文字幕| 欧美区亚洲区| 欧美国产在线视频| 99re66热这里只有精品4| 欧美三级黄美女| 亚洲欧美日韩国产综合| 久久亚洲图片| 亚洲美女在线国产| 国产精品精品视频| 久久av一区二区三区| 亚洲第一视频网站| 国产精品99久久久久久人| 欧美激情视频在线播放| 99精品国产在热久久婷婷| 欧美有码视频| 亚洲人成网站精品片在线观看 | 亚洲三级视频| 午夜亚洲性色福利视频| 伊人久久大香线蕉综合热线| 欧美精品v日韩精品v国产精品| 亚洲综合另类| 欧美激情影院| 久久国产手机看片| 日韩一级精品视频在线观看| 久久全国免费视频| 日韩天堂av| 奶水喷射视频一区| 香蕉乱码成人久久天堂爱免费| 国产一区二区高清| 欧美日韩国产探花| 久久久久久久尹人综合网亚洲| 亚洲免费成人| 免费日韩成人| 久久国产精品色婷婷| 一本色道久久综合亚洲91| 亚洲欧美激情视频| 91久久精品国产91久久| 亚洲精品一区在线观看香蕉| 亚洲国产成人tv| 亚洲一区网站| 日韩一区二区免费高清| 女生裸体视频一区二区三区| 亚洲国产成人在线视频| 亚洲三级影院| 亚洲三级电影在线观看| 91久久精品一区二区别| 欧美 日韩 国产一区二区在线视频 | 久久久水蜜桃| 久久久噜噜噜久久久| 亚洲国产欧美国产综合一区 | 亚洲欧美激情在线视频| 久久蜜臀精品av| 性久久久久久久久久久久| 欧美四级电影网站| 亚洲精品久久久一区二区三区| 欧美顶级艳妇交换群宴| 亚洲精品影院| 亚洲国产mv| 麻豆精品网站| 久久久在线视频| 欧美一区二区黄| 午夜一区二区三区不卡视频| 宅男66日本亚洲欧美视频| 91久久夜色精品国产网站| 1204国产成人精品视频| 黑人操亚洲美女惩罚| 国产精品一区二区久久| 欧美日韩精品在线视频| 欧美激情在线狂野欧美精品| 蜜臀91精品一区二区三区| 久久亚洲国产成人| 久久精品国产99| 欧美一区免费视频| 欧美一区二区三区四区高清| 欧美一区二区三区免费观看| 欧美一级欧美一级在线播放| 亚欧成人在线| 久久国产手机看片| 久久精品网址| 美女网站在线免费欧美精品| 免费国产一区二区| 欧美国产精品劲爆| 欧美日韩激情网| 国产精品国产精品| 国产精品一区久久久久| 国产午夜精品一区理论片飘花 | 噜噜噜噜噜久久久久久91| 久久综合狠狠综合久久激情| 久久综合狠狠综合久久综合88| 蜜桃视频一区| 欧美日韩一区二区三区在线| 欧美三级视频在线播放| 国产精品久久久久久超碰| 国产伦一区二区三区色一情| 国产日韩欧美一区二区三区在线观看| 国产免费观看久久黄| 韩国欧美国产1区| 亚洲国产精品热久久| 99在线视频精品| 午夜精品视频在线观看| 久久久精品一区| 欧美国产激情二区三区| 亚洲第一黄网| 99热免费精品| 性久久久久久久久| 六月婷婷一区| 国产精品久久久久久久久久尿 | 亚洲国产精品999| 日韩一级在线| 午夜欧美大片免费观看| 久久综合九色99| 最近中文字幕mv在线一区二区三区四区| 久久综合激情| 久久免费视频一区| 欧美国产一区在线| 国外成人免费视频| 免费成人高清| 一区二区三区视频免费在线观看| 亚洲一区日韩| 激情五月婷婷综合| 欧美日韩免费在线观看| 亚洲人成网站色ww在线| 亚洲日本成人| 一本在线高清不卡dvd| 亚洲欧美激情一区二区| 久久漫画官网| 欧美视频一区二区在线观看| 国产在线高清精品| 一区二区三区久久网| 久久久久久久尹人综合网亚洲| 欧美国产日韩亚洲一区| 亚洲视频欧洲视频| 男男成人高潮片免费网站| 国产精品欧美一区喷水| 亚洲精品免费观看| 久久九九国产精品| 亚洲图片欧美一区| 欧美国产免费| 狠狠久久综合婷婷不卡| 亚洲在线成人精品| 亚洲国产欧美一区二区三区同亚洲 | 欧美亚韩一区| 亚洲精品久久7777| 久久久夜夜夜| 亚洲免费影院| 欧美美女视频| 亚洲国产老妈| 免费观看日韩av| 欧美亚洲日本网站| 国产精品久久久亚洲一区| 亚洲免费大片| 欧美激情国产精品| 久久午夜精品| 国产亚洲在线| 欧美一区二区三区在线看| 亚洲视屏一区| 欧美色视频日本高清在线观看| 亚洲欧洲在线播放| 欧美成年人视频| 久久久久国产精品厨房| 国产日韩一区二区三区| 性感少妇一区| 亚洲制服少妇| 国产精品一区免费视频| 午夜视黄欧洲亚洲| 亚洲香蕉伊综合在人在线视看|