题解 P3395 【路障】

lowww666

2016-10-12 20:15:50

Solution

简单灌水法 由于从a0,b0到a1,b1的最短路径长为|a1-a0|+|b1-b0|-1,所以在这个时间之后的路障都可以忽略。边读入边处理,之后灌水法bfs推一遍,看看能不能达到终点。代码: ```cpp #include<cstdio> using namespace std; int f[1001][1001],n,t,x,y; int main() { scanf("%d",&t); for(int q=1;q<=t;q++) { scanf("%d",&n); for(int i=1;i<=2*n-2;i++) { scanf("%d%d",&x,&y); if(x==n&&y==n&&x+y-2<i) { printf("No\n"); break; } if(x+y-2>i) f[x][y]=-1; } f[1][1]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if((f[i-1][j]==1||f[i][j-1]==1)&&f[i][j]!=-1) f[i][j]=1; if(f[n][n]==1) printf("Yes\n"); else printf("No\n"); if(q!=t) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=0; } } ```