并查集——vijos1944 琵琶湖
来源:互联网 发布:aso优化面试该说些什么 编辑:程序博客网 时间:2024/04/29 00:53
https://vijos.org/p/1944
并查集维护连通块水题;
并查集不支持删除的嘛,所以先把ti倒着来;
然后么再按照n*m里的数值,把每个点排个序;
这样t数组不断downto的时候n*m数组顺便线性扫过去;
扫地时候用并查集统计就好了;
一开始每个点父亲-1;
然后如果更新了一个点,父亲自己;
然后很上下左右4个点取合并;
#include<bits/stdc++.h>#define Ll long longusing namespace std;const int N=1e6+5;struct di{int x,y,v;}d[N];int a[N],ans[N],top,fa[N],sum;int n,m,p;int get(int x){ if(fa[x]==-1)return -1; if(fa[x]==0)return x; return fa[x]=get(fa[x]);}void check(int xx,int yy,int x,int y){ if(x<1||x>n||y<1|y>m)return; int w=(xx-1)*m+yy; int t=(x-1)*m+y; int fw=get(w); int ft=get(t); if(ft==-1||fw==ft)return; sum--; fa[fw]=ft;}void work(int w){ int xx=d[w].x; int yy=d[w].y; int t=(xx-1)*m+yy; int f=get(t); if(f==-1){sum++;fa[t]=0;} check(xx,yy,xx-1,yy); check(xx,yy,xx+1,yy); check(xx,yy,xx,yy-1); check(xx,yy,xx,yy+1);}bool cmp(di a,di b){return a.v<b.v;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ int w=(i-1)*m+j; fa[w]=-1; d[w].x=i; d[w].y=j; scanf("%d",&d[w].v); } top=n*m; sort(d+1,d+top+1,cmp); scanf("%d",&p); for(int i=1;i<=p;i++)scanf("%d",&a[i]); for(int i=p;i;i--){ while(top&&d[top].v>a[i])work(top--); ans[i]=sum; } for(int i=1;i<=p;i++)printf("%d ",ans[i]);}
阅读全文
1 0
- 并查集——vijos1944琵琶湖
- 并查集——vijos1944 琵琶湖
- [vijos1944]琵琶湖(并查集)
- hdu1198—并查集
- 并查集—入门
- 并查集—应用
- 并查集—C
- poj1611——并查集
- poj1988——并查集
- 数据结构——并查集
- 并查集——学习详解
- 并查集——HDOJ 1213
- 并查集——HDOJ 1272
- 并查集——HDOJ 1325
- 数据结构——并查集
- 数据结构——并查集
- hdu3726——treap,并查集
- POJ 1182 —— 并查集
- java基础篇(五)——静态变量、静态方法、静态类
- 洛谷日记5
- Androidstudio正确导入so文件方式
- Codeforces Round #416 (Div. 2) A. Vladik and Courtesy
- gravatar 全球认可的图像 [U01]
- 并查集——vijos1944 琵琶湖
- 第六章 Linux常用命令(文件权限操作)
- USACO-Section1.1 Broken Necklace[...]
- ArcSDE连接数据库问题
- 区块链编程一翻译篇<一>:web3j介绍
- 嵌入式SQL语言
- windows 证书管理
- SAP 修改物料价格那些事
- js实现点击按钮变换背景颜色