P1514 引水入城
来源:互联网 发布:淘宝上较好的女装店 编辑:程序博客网 时间:2024/04/27 18:02
【题目描述】
见链接
P1514 引水入城
【分析】
bfs填色问题变式,如果从第一行能流到最后一行就保留,统计一下最后覆盖的区间是否覆盖满最后一行;然后运用贪心,选择连续的且覆盖最多的蓄水站即可,如果不满足,输出缺少的即可。
样例:
【参考代码】
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int ans,n,m,a[505][505],dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0},num;bool f[505][505],ff[505][505];struct node{ int x; int y;}line [100000];//保存第一行的点能覆盖的最后一行的区间 struct node1{ int x; int y;}q[250001];void bfs(int c,int r)//广搜,洪水填充 { memset(ff,false,sizeof(ff)); int head,tail,xx,yy,i; head=0; tail=1; ff[c][r]=true; q[1].x=c; q[1].y=r; do { ++head; for (i=1;i<=4;++i) { xx=q[head].x+dx[i]; yy=q[head].y+dy[i]; if (xx>n||xx<1||yy>m||yy<1) continue; if (!ff[xx][yy]&&a[q[head].x][q[head].y]>a[xx][yy]) { ++tail; q[tail].x=xx; q[tail].y=yy; f[xx][yy]=true; ff[xx][yy]=true; } } }while (head<tail); for (i=1;i<=m;++i)//判断第一行该点影响最后一行的区间的左端点。 if (ff[n][i]) { line[++num].x=i; break; } for (i=m;i>=1;--i)//判断第一行该点影响最后一行的区间的右端点。 if (ff[n][i]) { line[num].y=i; break; } if (line[num].x==line[num].y&&line[num].x==0) --num;//如果无法覆盖到最后一行就取消这个区间。 }bool cmp(node a,node b){ return a.x<b.x||a.x==b.x&&a.y>b.y;}int main(){ int i,j; cin>>n>>m; for (i=1;i<=n;++i) for (j=1;j<=m;++j) cin>>a[i][j]; for (j=1;j<=m;++j) if (!f[1][j]&&a[1][j]>=a[1][j-1]&&a[1][j]>=a[1][j+1]) { f[1][j]=true; bfs(1,j);//如果该点之前没有被填充过就填充。 } int s=0; for (i=1;i<=m;++i) if (f[n][i]==true) ++s;//统计最后一行能被覆盖的个数 if (s==m) { cout<<1<<endl; sort(line+1,line+num+1,cmp); int xx=1; int yy=0; int s=0; while (1) { int by=0; for (i=1;i<=num;++i) if (line[i].x>=xx&&line[i].x<=yy+1&&line[i].y>by) by=line[i].y; yy=by; ++s; if (yy==m) break; } cout<<s; } else cout<<0<<endl<<m-s;}
阅读全文
0 0
- P1514 引水入城
- P1514 引水入城
- P1514 引水入城
- 【P1514】引水入城
- P1514 引水入城
- 洛谷 P1514 引水入城
- 洛谷 P1514 引水入城
- 洛谷 P1514 引水入城
- 洛谷 P1514 引水入城
- 洛谷 P1514 引水入城
- 洛谷P1514 引水入城
- 洛谷 P1514 [NOIP2010 T4] 引水入城
- 洛谷——P1514 引水入城
- NOIp2010TG/Luogu P1514 引水入城 解题报告
- |洛谷|NOIP2010|搜索|贪心|P1514 引水入城
- 再A一遍 洛谷P1514 引水入城
- 洛谷P1514 引水入城(深搜,贪心)
- 引水入城(dfs的做法)洛谷p1514
- tf.InteractiveSession()与tf.Session()
- Android:手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案
- C++中iostream和iostream.h有什么区别?
- php中的==和===的用法及区别
- 深入理解scala的柯里化( currying or curry )以及其用处
- P1514 引水入城
- POJ 2151 Check the difficulty of problems(概率DP)
- POJ 2785 题解
- C
- HashMap HashTable HashSet区别
- 机器学习之开发环境-Python
- FZU-2205 据说题目很水(思维、完全二分图性质避免三元环)
- codevs 1269 匈牙利游戏
- JAVA编程思想随笔(二)——标签的使用