noip2010 引水入城 bfs+贪心

如果能够实现,每个河边的城市对应的控制区域一定是一条线段。

所以直接bfs每个河边的城市,贪心线段的右端点

#include
#include
#include
#include
using namespace std;
int qx[500005],qy[500005],a[505][505],n,m,bo[505][505],ans;//队列一定要开大!!!!!! 
bool flag[505],ff[505];
struct WATER{
    int l,r;
    WATER(){l=r=0x7fffffff;}
}ww[505];
void bfs(int xx){
    int h=1,t=1,x,y;
    qx[1]=1; qy[1]=xx;
    bo[1][xx]=xx;
    while(h<=t){
        x=qx[h]; y=qy[h++];
        if((x-1>0)&&(bo[x-1][y]!=xx)&&(a[x-1][y]0)&&(bo[x][y-1]!=xx)&&(a[x][y-1]m){maxm=i-1;break;}
    while(nownow+1) break;
            if(ww[i].l<=now+1){
                if(ww[i].r>=maxr){
                    maxr=ww[i].r;
                    it=i;
                }
            }
        }
        now=maxr; ans++;
    }
    printf("1\n%d\n",ans);
    return 0;
}


转载于:https://www.cnblogs.com/Ren-Ivan/p/7746757.html

你可能感兴趣的:(noip2010 引水入城 bfs+贪心)