POJ 2227 FloodFill (priority_queue)
2016-10-29 09:01
344 查看
题意:
思路:
搞一个priority_queue 先把边界加进去 不断取最小的 向中间扩散
//By SiriusRen #include <queue> #include <cstdio> #include <cstring> using namespace std; #define int long long struct Node{int h,x,y;Node(int a,int b,int c){h=a,x=b,y=c;}}; priority_queue<Node>pq; bool operator <(Node a,Node b){return a.h>b.h;} int n,m,ans,a[305][305],xx[]={1,-1,0,0},yy[]={0,0,1,-1}; bool vis[305][305]; signed main(){ memset(vis,1,sizeof(vis)); scanf("%lld%lld",&m,&n); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lld",&a[i][j]),vis[i][j]=0; for(int i=1;i<=n;i++)pq.push(Node(a[i][1],i,1)),pq.push(Node(a[i][m],i,m)),vis[i][m]=vis[i][1]=1; for(int i=2;i<=m;i++)pq.push(Node(a[1][i],1,i)),pq.push(Node(a [i],n,i)),vis [i]=vis[1][i]=1; while(!pq.empty()){ Node t=pq.top();pq.pop(); for(int i=0;i<4;i++){ int dx=t.x+xx[i],dy=t.y+yy[i]; if(!vis[dx][dy]){ if(a[dx][dy]<t.h)ans+=t.h-a[dx][dy],pq.push(Node(t.h,dx,dy)); else pq.push(Node(a[dx][dy],dx,dy)); vis[dx][dy]=1; } } } printf("%lld\n",ans); }
相关文章推荐
- POJ 2227 FloodFill (priority_queue)
- 优先队列(priority_queue)的cmp,POJ(2051)
- POJ 1862 Stripies (priority_queue 优先队列)
- poj 2442 priority_queue
- POJ - 2387(dijkstra+priority_queue)
- poj 3253 Fence Repair(priority_queue)
- floodfill 种子填充法 poj 2227
- POJ 3190 priority_queue 贪心
- POJ 3253 STL priority_queue
- poj 3253 Fence Repair(Huffman问题,优先队列priority_queue)
- poj 2312(bfs+priority_queue)
- poj 1862 priority_queue
- POJ 3190 priority_queue 贪心
- POJ 3253 fence repair [STL][priority_queue]
- POJ 1862 Stripies priority_queue 单调队列
- POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
- PAT 修理牧场(25)(Huffman问题,优先队列priority_queue)(与poj 3253 一模一样的思路)
- poj 3377(bfs+priority_queue)
- Huffman和Priority_queue 解决POJ 1521
- poj 2051 (用Priority_queue求解