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

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>
            久久久久久穴| 另类图片综合电影| 亚洲欧美国产一区二区三区| 久久综合激情| 欧美一级午夜免费电影| 国产精品久久久久免费a∨大胸| 亚洲黄一区二区| 久久综合图片| 久久久久欧美| 亚洲国产毛片完整版| 欧美国产极速在线| 欧美成人午夜免费视在线看片| 黄色亚洲网站| 奶水喷射视频一区| 欧美成人中文字幕在线| 最新日韩在线| 亚洲精品国精品久久99热| 久久久99国产精品免费| 在线看日韩av| 亚洲狠狠丁香婷婷综合久久久| 欧美成人精品在线播放| 亚洲精品偷拍| 一本一本久久a久久精品综合麻豆| 欧美日韩午夜激情| 午夜精品电影| 久久精视频免费在线久久完整在线看| 国内外成人免费视频| 女人色偷偷aa久久天堂| 欧美国产综合| 亚洲一区三区电影在线观看| 国产精品99久久久久久久久| 国产欧美一区二区三区沐欲| 葵司免费一区二区三区四区五区| 久久久久免费| 亚洲天堂男人| 久久xxxx精品视频| 亚洲日本中文| 亚洲一区二区三区视频播放| 禁久久精品乱码| 亚洲精品一区中文| 国产亚洲精品久久久久动| 欧美国产视频在线观看| 国产精品99免费看 | 久久国产精品久久久久久久久久| 欧美一区二区精品| 亚洲欧洲日本专区| 亚洲宅男天堂在线观看无病毒| 一区二区在线免费观看| 91久久亚洲| 宅男精品视频| 亚洲国产一区二区三区青草影视 | 欧美肥婆在线| 欧美制服丝袜| 欧美激情国产高清| 久久精品国产清自在天天线| 欧美激情国产精品| 久久久久高清| 欧美三区在线| 欧美激情一二区| 国产午夜精品一区理论片飘花| 亚洲激情网址| 狠狠色狠狠色综合人人| 99re国产精品| 亚洲三级视频| 久久视频一区二区| 午夜日韩激情| 欧美三级黄美女| 欧美大色视频| 国内欧美视频一区二区| 亚洲一区高清| 亚洲一区二区视频在线| 欧美成人一区二免费视频软件| 久久成人国产| 国产精品久久午夜夜伦鲁鲁| 亚洲国产精品欧美一二99| 国产亚洲欧美一区二区| 亚洲午夜女主播在线直播| 日韩视频在线免费观看| 久久免费视频在线| 久久久久国产精品午夜一区| 国产精品久久久久久久第一福利| 亚洲肉体裸体xxxx137| 亚洲人成绝费网站色www| 久久网站免费| 免费试看一区| 亚洲大胆在线| 蜜臀91精品一区二区三区| 免费不卡中文字幕视频| 伊人精品成人久久综合软件| 久久av一区二区| 久热这里只精品99re8久| 含羞草久久爱69一区| 久久精品国产99国产精品| 久久久噜噜噜久久中文字幕色伊伊| 国产精自产拍久久久久久| 亚洲一区二区免费视频| 亚洲欧美一区二区三区久久| 国产精品麻豆va在线播放| 亚洲欧美国产不卡| 欧美专区18| 国内精品伊人久久久久av一坑| 久久久噜噜噜久久中文字幕色伊伊| 久久夜色精品国产欧美乱| 亚洲电影在线看| 欧美激情精品久久久久久大尺度| 亚洲日本久久| 午夜视频精品| 伊人激情综合| 欧美日精品一区视频| 亚洲伊人第一页| 裸体一区二区| 一区二区精品在线| 国产乱人伦精品一区二区| 久久精品视频一| 亚洲黄色av| 欧美一级成年大片在线观看| 久久综合电影一区| 亚洲激情一区二区三区| 亚洲一区二区三区成人在线视频精品 | 一区二区三区成人精品| 国产精品久久久久久久久免费樱桃 | 亚洲国产精品女人久久久| 欧美激情欧美狂野欧美精品| 亚洲天堂久久| 欧美国产第二页| 亚洲欧美一区二区激情| 亚洲成色777777女色窝| 欧美日韩综合视频网址| 久久久成人精品| 一区二区国产精品| 美国十次成人| 亚洲女人av| 亚洲人成网站777色婷婷| 国产精品a级| 欧美aⅴ99久久黑人专区| 亚洲欧美国产精品专区久久| 亚洲国产激情| 久久九九免费视频| 亚洲视频二区| 亚洲国产精品久久久久久女王| 国产精品美女一区二区在线观看| 久久久一区二区| 亚洲欧美日韩精品在线| 亚洲人成在线播放网站岛国| 久久久亚洲国产天美传媒修理工 | 国产有码在线一区二区视频| 欧美日韩国产大片| 久久蜜桃资源一区二区老牛| 亚洲一区二区三区视频| 亚洲精品一区二区三区99| 美女久久网站| 久久久综合免费视频| 亚洲欧美日韩国产另类专区| 亚洲精品久久7777| 在线免费精品视频| 国内精品久久久久久久果冻传媒| 国产精品国产三级国产普通话99| 免费成人在线观看视频| 久久超碰97中文字幕| 亚洲欧美日本在线| 亚洲少妇一区| 在线亚洲高清视频| 日韩一区二区久久| 夜夜嗨av一区二区三区四季av| 亚洲高清在线视频| 欧美黄色片免费观看| 免费精品99久久国产综合精品| 久久久xxx| 久久久蜜桃精品 | 欧美成人午夜激情在线| 久久久久欧美| 久久这里有精品15一区二区三区| 欧美亚洲自偷自偷| 久久精品av麻豆的观看方式| 欧美一区二区网站| 久久黄金**| 久久综合中文色婷婷| 久久久久久午夜| 欧美激情女人20p| 亚洲第一偷拍| 亚洲欧洲日本在线| 日韩亚洲欧美一区| 亚洲理伦在线| 亚洲调教视频在线观看| 午夜免费电影一区在线观看| 亚洲欧美综合一区| 久久久精品久久久久| 久久综合色8888| 欧美黄网免费在线观看| 欧美日韩午夜在线视频| 国产精品捆绑调教| 国模叶桐国产精品一区| 亚洲福利视频一区| 夜夜夜精品看看| 亚洲欧美一区在线| 久久久蜜桃精品| 亚洲黄页视频免费观看| 亚洲视频免费在线| 久久久久国产一区二区三区四区 | 亚洲精品在线一区二区|