博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu] 引水入城
阅读量:4973 次
发布时间:2019-06-12

本文共 1960 字,大约阅读时间需要 6 分钟。

bfs + 线段覆盖

#include
using namespace std;struct sea { int h , num; bool got;} s[500];bool cmp( sea a , sea b ) { return a.h > b.h;}const int dir[4][2] = { { 0 , 1 } , { 0 , -1 } , { 1 , 0 } , { -1 , 0 } };int ma[500][500] , n , m , ans , ct[501];bool built[501];queue
desert[500];void bfs( int start ) { bool went[500][500] = { 0 }; queue
> q; q.push( make_pair( 0 , start ) ); if( n == 1 ) { desert[start].push( start ); ct[start]++; } while( !q.empty() ) { pair
a = q.front(); q.pop(); for( int i = 0 ; i < 4 ; i++ ) { pair
b = make_pair( a.first + dir[i][0] , a.second + dir[i][1] ); if( b.first >= 0 && b.first < n && b.second >= 0 && b.second < m && went[b.first][b.second] == 0 && ma[b.first][b.second] < ma[a.first][a.second] ) { q.push( b ); if( b.first == 0 ) s[b.second].got = 1; if( b.first + 1 == n ) { desert[b.second].push( start ); ct[start]++; } went[b.first][b.second] = 1; } } }}void greedy() { int i = 0; while( i < m ) { int maxnum = 0 , maxn; while( !desert[i].empty() ) { ct[desert[i].front()]--; if( ct[desert[i].front()] >= maxnum ) { maxnum = ct[desert[i].front()]; maxn = desert[i].front(); } desert[i].pop(); } i++; while( ct[maxn] > 0 ) { while( !desert[i].empty() ) { ct[desert[i].front()]--; desert[i].pop(); } i++; } ans++; }}int main() { cin >> n >> m; for( int i = 0 ; i < n ; i++ ) for( int j = 0 ; j < m ; j++ ) cin >> ma[i][j]; for( int i = 0 ; i < m ; i++ ) s[i].h = ma[0][i] , s[i].num = i , s[i].got = 0; sort( s , s + m , cmp ); int p = 0; while( p < m ) { if( !s[s[p].num].got ) bfs( s[p].num ); p++; } for( int i = 0 ; i < m ; i++ ) if( desert[i].empty() ) ans++; if( ans != 0 ) { cout << 0 << '\n' << ans; return 0; } greedy(); cout << 1 << '\n' << ans;}

 

转载于:https://www.cnblogs.com/shandongs1/p/8637120.html

你可能感兴趣的文章
多线程之ThreadLocal类
查看>>
Qt-读取文本导出word
查看>>
OC语言description方法和sel
查看>>
C#中得到程序当前工作目录和执行目录的五种方法
查看>>
扫描线与悬线
查看>>
用队列和链表的方式解决约瑟夫问题
查看>>
python 迭代器与生成器
查看>>
基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD)
查看>>
[django实践]投票app
查看>>
[django]form的content-type(mime)
查看>>
JQUERY —— 绑定事件
查看>>
在TabControl中的TabPage选项卡中添加Form窗体
查看>>
oracle中SET DEFINE意思
查看>>
个人作业-最长英语链
查看>>
JMeter-性能测试之报表设定的注意事项
查看>>
1066-堆排序
查看>>
仿面包旅行个人中心下拉顶部背景放大高斯模糊效果
查看>>
强大的css3
查看>>
c#中的组件拖拽和MouseMove事件
查看>>
C# 小叙 Encoding (二)
查看>>