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

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年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

"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久久国产综合精品| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国产精品专区久久| 一区二区三区国产精华| 欧美怡红院视频| 欧美激情免费在线| 国产精品女主播在线观看| 国产一区视频网站| 91久久精品一区二区三区| 夜夜嗨av一区二区三区网站四季av | 亚洲美女av在线播放| 亚洲午夜一级| 久久久在线视频| 久久久夜夜夜| 亚洲巨乳在线| 欧美一站二站| 欧美午夜女人视频在线| 影音先锋在线一区| 中日韩男男gay无套| 久久久久99| 一本色道久久88亚洲综合88| 久久国产精品电影| 欧美午夜精品久久久| 亚洲大胆人体视频| 久久丁香综合五月国产三级网站| 亚洲高清精品中出| 亚洲欧美激情四射在线日| 欧美日韩国产综合新一区| 亚洲国产美女精品久久久久∴| 久久久高清一区二区三区| 亚洲一区在线看| 欧美性色综合| 亚洲视频导航| 亚洲精品在线看| 欧美精品99| 一区二区激情视频| 亚洲乱码精品一二三四区日韩在线| 蜜臀久久99精品久久久画质超高清| 国产综合久久| 久久中文字幕导航| 久久精品国产综合精品| 国内久久婷婷综合| 久久裸体艺术| 久久天堂av综合合色| 尤物九九久久国产精品的分类| 久久精品首页| 久久久久久久网站| 亚洲国产另类精品专区 | 亚洲免费观看高清完整版在线观看熊 | 免费成人毛片| 老牛国产精品一区的观看方式| 黑人操亚洲美女惩罚| 久久精品国产亚洲一区二区| 欧美有码在线观看视频| 国模私拍一区二区三区| 玖玖精品视频| 欧美黄色影院| 亚洲欧美在线一区二区| 亚洲一区激情| 在线观看久久av| 亚洲激情在线观看| 欧美三级网址| 久久久久国产一区二区三区四区| 久久久久se| 99精品欧美一区二区三区| 一本色道久久99精品综合| 国产精品综合| 欧美国产亚洲另类动漫| 欧美精品色综合| 国产伦精品一区二区| 久久亚洲综合色一区二区三区| 男女激情视频一区| 亚洲尤物精选| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美一区二区三区视频| 亚洲第一中文字幕| 一本色道久久综合亚洲精品婷婷| 国产亚洲aⅴaaaaaa毛片| 欧美激情国产精品| 国产麻豆日韩| 亚洲国产日韩欧美| 国产日韩欧美视频| 亚洲精品一区久久久久久| 国产亚洲欧洲997久久综合| 亚洲国产激情| 国产夜色精品一区二区av| 亚洲人www| 在线精品视频在线观看高清| 亚洲图片你懂的| 欧美在线三级| 一区二区三区精密机械公司 | 久久天天躁狠狠躁夜夜爽蜜月| 一区二区三区av| 久久精品夜夜夜夜久久| 一本色道久久综合狠狠躁的推荐| 欧美中文字幕在线| 午夜在线精品偷拍| 欧美日韩日本国产亚洲在线| 麻豆精品一区二区av白丝在线| 国产精品久久| 亚洲精品一线二线三线无人区| 狠狠色丁香久久婷婷综合_中| 这里只有精品视频在线| 亚洲经典三级| 久久久久久穴| 久久综合给合久久狠狠狠97色69| 国产精品magnet| 日韩五码在线| 这里只有精品视频在线| 免费观看成人www动漫视频| 久久人体大胆视频| 国产亚洲精品v| 亚洲性av在线| 亚洲欧美春色| 欧美日韩免费高清一区色橹橹| 欧美国产日韩精品| 一区二区亚洲精品国产| 香蕉精品999视频一区二区| 亚洲一区二区三区在线| 欧美日韩国产亚洲一区| 最新国产成人av网站网址麻豆| 尤物网精品视频| 欧美在线视频导航| 久久精品综合一区| 欧美国产精品v| 亚洲国产美女| 亚洲经典三级| 欧美精品日韩www.p站| 亚洲国产精品小视频| 亚洲黄色小视频| 欧美日韩在线三区| 日韩性生活视频| 亚洲国产精品悠悠久久琪琪| 久久综合伊人77777| 欧美激情精品久久久久| 99国产一区| 欧美日韩一区综合| 中文在线不卡| 欧美制服丝袜| 亚洲电影观看| 欧美日韩1区2区| 亚洲在线成人| 久久综合久久久久88| 激情久久一区| 欧美韩日高清| 亚洲午夜精品视频| 乱人伦精品视频在线观看| 91久久国产综合久久蜜月精品| 欧美另类99xxxxx| 亚洲一线二线三线久久久| 久久视频免费观看| 日韩天堂av| 国产欧美日韩在线播放| 久久精品一区四区| 亚洲精品一二三区| 久久精品一区二区三区不卡牛牛| 在线日韩日本国产亚洲| 欧美四级在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 99香蕉国产精品偷在线观看| 久久精品视频免费| 这里只有视频精品| 伊人成人网在线看| 国产精品性做久久久久久| 欧美国产日韩视频| 亚洲欧美日韩在线一区| 亚洲第一中文字幕| 国产精品亚洲视频| 欧美激情精品久久久久久蜜臀| 亚洲一区二区网站| 亚洲国产精品第一区二区三区 | 久久精品二区三区| av成人毛片| 伊甸园精品99久久久久久| 国产精品高潮在线| 欧美激情1区2区3区| 久久精品青青大伊人av| 亚洲视频一区二区| 亚洲国产精品视频| 蜜桃精品一区二区三区| 久久成人精品视频| 野花国产精品入口| 国产日韩欧美高清| 欧美日韩hd| 女同性一区二区三区人了人一| 欧美亚洲免费| 销魂美女一区二区三区视频在线|