求助,过了7个点,WA声一片

P1514 [NOIP2010 提高组] 引水入城

同感,贴代码求助 ```cpp #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define maxn 505 using namespace std; inline void read(int &x) { x=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); } struct data { int x,y; }a[maxn]; int comp(data a,data b) { return a.x<b.x; } const int fx[4]={0,1,0,-1},fy[4]={1,0,-1,0}; int map[maxn][maxn],n,m,i,j,q[maxn*maxn*2+10][2],tot,ans=1; bool f[maxn][maxn],flag=0; int main() { read(n); read(m); for (i=1;i<=n;++i) for (j=1;j<=m;++j) read(map[i][j]); memset(f,true,sizeof(f)); int head=0,tail=0; for (j=1;j<=m;++j) f[1][j]=0,q[++tail][0]=1,q[tail][1]=j; while (head++<tail) { for (i=0;i<4;++i) { int xx=q[head][0]+fx[i],yy=q[head][1]+fy[i]; if (f[xx][yy]&&xx>0&&yy>0&&xx<=n&&yy<=m&&map[xx][yy]<map[q[head][0]][q[head][1]]) { f[xx][yy]=0; q[++tail][0]=xx; q[tail][1]=yy; } } } for (j=1;j<=m;++j) if (f[n][j]) { flag=1; tot++; } if (flag) { puts("0"); printf("%d",tot); return 0; } for (j=1;j<=m;++j) { memset(f,true,sizeof(f)); f[1][j]=0; head=0; tail=1; q[1][0]=1; q[1][1]=j; while (head++<tail) { for (i=0;i<4;++i) { int xx=q[head][0]+fx[i],yy=q[head][1]+fy[i]; if (f[xx][yy]&&xx>0&&xx<=n&&yy>0&&yy<=m&&map[xx][yy]<map[q[head][0]][q[head][1]]) { q[++tail][0]=xx; q[tail][1]=yy; f[xx][yy]=0; } } } for (i=1;i<=m;++i) if (!f[n][i]) { a[j].x=i; break; } for (;i<=m+1;++i) if (f[n][i]) { a[j].y=i-1; break; } } sort(a+1,a+m+1,comp); puts("1"); int end=a[1].y,last=a[1].y; if (last==m) { printf("%d",ans); return 0; } for (i=1;i<=m;++i) if (a[i].x<=end) last=max(last,a[i].y); else ans++,end=last; printf("%d",ans+1); return 0; } ```
by hl666 @ 2017-11-03 13:31:23


改过了,发现区间覆盖打炸了 同时记录的时候也出现了些问题
by hl666 @ 2017-11-03 14:35:14


对于楼主的,表示大佬的区间修改看不懂
by hl666 @ 2017-11-03 14:37:00


|