codevs 1066 引水入城
2016-11-14 22:12
330 查看
传送门
题目描述 Description
bfs
题目描述 Description
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #define N 510 #define ll long long using namespace std; int xx[5]={0,0,0,1,-1},yy[5]={0,1,-1,0,0}; int n,m,ans1(0); int h ,num ; bool f ={0}; struct node { int l,r; }xd ; void bfs(int x,int y)//第一问。 { f[x][y]=1; for (int i=1;i<=4;i++) { int X=x+xx[i],Y=y+yy[i]; if (0<X&&X<=n&&0<Y&&Y<=m&&h[X][Y]<h[x][y]&&!f[X][Y]) { f[X][Y]=1; bfs(X,Y); } } } void bfs2(int x,int y,int k)//第二问。 { if (x==n) xd[k].l=min(xd[k].l,y),xd[k].r=max(xd[k].r,y); f[x][y]=1; for (int i=1;i<=4;i++) { int X=x+xx[i],Y=y+yy[i]; if (0<X&&X<=n&&0<Y&&Y<=m&&h[X][Y]<h[x][y]&&!f[X][Y]) { f[X][Y]=1; bfs2(X,Y,k); } } } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&h[i][j]); for (int i=1;i<=m;i++) bfs(1,i); for (int i=1;i<=m;i++) if (!f [i]) ans1++; if (ans1) { printf("0\n%d\n",ans1); } else { for (int i=1;i<=m;i++) { memset(f,0,sizeof(f)); xd[i].l=0x7fffffff/3; xd[i].r=-xd[i].l; bfs2(1,i,i); } num[0]=0; for (int i=1;i<=m;i++)//线段区间dp { num[i]=0x7fffffff/3; for (int j=1;j<=m;j++) if (xd[j].l<=i&&xd[j].r>=i) num[i]=min(num[i],num[xd[j].l-1]+1); } printf("1\n%d\n",num[m]); } return 0; }
bfs
相关文章推荐
- Codevs1066 引水入城
- codevs1066 luogu1514 引水入城
- Codevs 1066 引水入城
- codevs1066 luogu1514 引水入城
- Cpp环境【NOIP2010提高组】【Vijos1777】【Code[VS]1066】【CQYZOJ1793】引水入城
- 引水入城(codevs 1066)
- 【搜索+DP】codevs1066-引水入城
- codevs 1066 引水入城
- codevs 1066 引水入城(DFS+DP)
- Codevs P1066 引水入城 2010年NOIP全国联赛提高组
- 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
- Codevs_P1066 引水入城(BFS+贪心)
- codevs1066&&noip引水入城
- 【codevs2440】【BZOJ1066】蜥蜴,最大流
- 作业调度方案(codevs 1156)
- COdevs1425最长公共子串
- CODE[VS] 1065 01字符串
- codevs1036商务旅行(LCA)
- codevs 3728 联合权值
- Codevs 打鼹鼠