BZOJ1104: [POI2007]洪水pow
2017-09-24 19:50
281 查看
因为海拔底的水泵可以兹瓷抽海拔高的地方的水,所以我们按海拔高度从小到大处理每个小正方形
处理每个小正方形时,将它和相邻的不比他高的区域用并查集合并成一个联通块,因为他的水可以流到这些区域,每个高度合并完后,看这个高度的属于城市的区域,如果所在的联通块已有水泵,则这个水泵可以为这个区域抽水,否则需要给它所在的联通块增加一个水泵
注意有100w个元素,不能排序,因为高度不超过1000,每个高度开个vector就行了
code:
处理每个小正方形时,将它和相邻的不比他高的区域用并查集合并成一个联通块,因为他的水可以流到这些区域,每个高度合并完后,看这个高度的属于城市的区域,如果所在的联通块已有水泵,则这个水泵可以为这个区域抽水,否则需要给它所在的联通块增加一个水泵
注意有100w个元素,不能排序,因为高度不超过1000,每个高度开个vector就行了
code:
#include<set> #include<map> #include<deque> #include<queue> #include<stack> #include<cmath> #include<ctime> #include<bitset> #include<string> #include<vector> #include<cstdio> #include<cstdlib> #include<cstring> #include<climits> #include<complex> #include<iostream> #include<algorithm> #define ll long long using namespace std; const int dx[]={-1,0,1,0}; const int dy[]={0,1,0,-1}; const int maxn = 1100; int n,m; bool v[maxn*maxn]; int c[maxn][maxn],id[maxn][maxn]; int fa[maxn*maxn]; int find_(const int x){return fa[x]==x?x:fa[x]=find_(fa[x]);} struct node{int x,i,j;}; vector<node>a[maxn]; inline bool cmp(const node x,const node y){return x.x<y.x;} int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&c[i][j]); id[i][j]=(i-1)*m+j; fa[id[i][j]]=id[i][j]; a[abs(c[i][j])].push_back((node){abs(c[i][j]),i,j}); } } int ans=0; for(int i=0;i<=1000;i++) { for(int j=0;j<a[i].size();j++) { int x=a[i][j].i,y=a[i][j].j,xi=id[x][y]; for(int k=0;k<4;k++) { int nx=x+dx[k],ny=y+dy[k],yi=id[nx][ny]; if(fa[yi]&&a[i][j].x>=abs(c[nx][ny])) { int f1=find_(xi),f2=find_(yi); if(v[f1]) v[f2]=true; fa[f1]=f2; } } } for(int j=0;j<a[i].size();j++) { int x=a[i][j].i,y=a[i][j].j,xi=id[x][y]; if(c[x][y]>0&&!v[find_(xi)]) ans++,v[fa[xi]]=true; } } printf("%d\n",ans); return 0; }
相关文章推荐
- BZOJ1104: [POI2007]洪水pow
- BZOJ1104 [POI2007]洪水pow——并查集+乱搞
- 并查集 [POI2007]洪水pow
- [POI2007]洪水pow 并查集
- BZOJ 1104: [POI2007]洪水pow 并查集
- [BZOJ]1104: [POI2007]洪水pow
- BZOJ 1104 POI2007 洪水pow 并查集
- [POI2007]洪水pow bfs
- bzoj1104 [POI2007]洪水pow
- BZOJ 1104: [POI2007]洪水pow 并查集
- [POI2007]洪水pow bfs
- BZOJ1104 : [POI2007]洪水pow
- 【BZOJ】1104: [POI2007]洪水pow
- P3457 [POI2007]POW-The Flood
- Luogu345: [POI2007]POW-The Flood
- Luogu345: [POI2007]POW-The Flood
- 【LuoguP3457】[POI2007]POW-The Flood
- 并查集 - BZOJ 1104 [POI2007]洪水
- 洪水 Pow
- 洛谷P3457 [POI2007]POW-The Flood