usaco Overfencing

来源:互联网 发布:油耗计算器软件 编辑:程序博客网 时间:2024/04/30 05:51

思路很简单,就是从两个出口对每个点进行一次bfs,结果各种各种问题被各种虐。。。。。

code:

/*    ID:yueqi    LANG:C++    TASK:maze1*/#include <set>#include <map>#include <ctime>#include <queue>#include <cmath>#include <stack>#include <limits.h>#include <vector>#include <bitset>#include <string>#include <cstdio>#include <cstring>#include <fstream>#include <string.h>#include <iostream>#include <algorithm>#define Si set<int>#define LL long long#define pb push_back#define PS printf(" ")#define Vi vector<int>#define LN printf("\n")#define lson l,m,rt << 1#define rson m+1,r,rt<<1|1#define SD(a) scanf("%d",&a)#define PD(a) printf("%d",a)#define SET(a,b) memset(a,b,sizeof(a))#define FF(i,a) for(int i(0);i<(a);i++)#define FD(i,a) for(int i(a);i>=(1);i--)#define FOR(i,a,b) for(int i(a);i<=(b);i++)#define FOD(i,a,b) for(int i(a);i>=(b);i--)#define readf freopen("maze1.in","r",stdin)#define writef freopen("maze1.out","w",stdout)const int maxn = 500;const long long BigP=999983;const long long  INF = 0x5fffffff;const int dx[]={-1,0,1,0};const int dy[]={0,1,0,-1};const double pi = acos(-1.0);const double eps= 1e-7;using namespace std;int x[2],y[2];char s[210][100];int q[20000][2],maxx,dis[2][210][100];bool t[2][210][100];void bfs(int x, int y, int n, int m, int h){    int start=0,end=1;    q[start][0] = x;    q[start][1] = y;    dis[h][x][y] = 1;    t[h][x][y] = 1;    while(start!=end){        x=q[start][0],y=q[start][1];        FF(i,4){            int nx=x+dx[i],ny=y+dy[i];            if (nx>=0&&nx<n&&ny>=0&&ny<m&&!t[h][nx][ny]&&s[nx][ny]==' '){                q[end][0]=nx;                q[end][1]=ny;                dis[h][nx][ny]=dis[h][x][y]+1;                t[h][nx][ny]=true;                end++;            }        }start++;    }}int main(){    readf;writef;    int n,m,k=0;    scanf("%d%d",&n,&m);    getchar();    n=n*2+1;m=m*2+1;    FF(i,m){        FF(j,n){            scanf("%c", &s[i][j]);            if (s[i][j]==' '&&(i==0||i==m-1||j==0||j==n-1)){                x[k] = i, y[k++] = j;            }        }getchar();    }    bfs(x[0],y[0],m,n,0);    bfs(x[1],y[1],m,n,1);    FF(i,m) FF(j,n) maxx=max(maxx,min(dis[0][i][j], dis[1][i][j]));    printf("%d\n", maxx/2);    return 0;}


原创粉丝点击