bzoj3430 [Usaco2014 Jan]Ski Course Rating 并查集+bfs
来源:互联网 发布:crystalball for mac 编辑:程序博客网 时间:2024/06/16 20:39
这题正解脑洞有点大。。一开始并没有想到正解,只是会二分暴力= =
后来膜了一发题解发现原来还有人二分+可持久化并查集做的,不过这是针对t不同的情况下= =以后可以出个题祸害社会
正解是先把任意两点之间连边,记录一下出发点和到达点,然后按照边的大小排序,从小到大做,每一次用并查集将可以互通的两块联合在一起,直接计算贡献。。
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int inf=1e9;int n,m;const int dx[2]={0,1};const int dy[2]={1,0};const int N=600*600;int ez[N],ey[N],ex[N];int f[N],siz[N],cnt[N],eid[N];int t,h[600][600],id[600][600],tot;bool cmp(int a,int b){ return ez[a]<ez[b];}inline int find(int x){ return x==f[x]?x:f[x]=find(f[x]);}int main(){ scanf("%d%d%d",&n,&m,&t); fo(i,1,n) { fo(j,1,m) { scanf("%d",&h[i][j]); id[i][j]=++tot; f[tot]=tot; siz[tot]=1; } } tot=0; fo(i,1,n) { fo(j,1,m) { int x; scanf("%d",&x); if (x)cnt[id[i][j]]=1; fo(k,0,1) { int x=i+dx[k]; int y=j+dy[k]; if (x>=1&&x<=n&&y>=1&&y<=m) { ex[++tot]=id[i][j]; ey[tot]=id[x][y]; ez[tot]=abs(h[i][j]-h[x][y]); eid[tot]=tot; } } } } sort(eid+1,eid+1+tot,cmp); ll ans=0; fo(i,1,tot) { int x=eid[i]; int a=find(ex[x]),b=find(ey[x]); if (a==b)continue; if (siz[a]+siz[b]>=t) { if (siz[a]<t)ans+=1ll*cnt[a]*ez[x]; if (siz[b]<t)ans+=1ll*cnt[b]*ez[x]; //注意这里直接把ez[x]当作边是因为已经从小到大排序了,所以能保证ez[x]是两个块中最大的边。 } if (siz[a]<siz[b])swap(a,b); f[b]=a; siz[a]+=siz[b]; cnt[a]+=cnt[b]; } printf("%lld\n",ans);}
阅读全文
0 0
- bzoj3430 [Usaco2014 Jan]Ski Course Rating 并查集+bfs
- 【BZOJ】3430 [Usaco2014 Jan]Ski Course Rating 并查集
- bzoj 3430: [Usaco2014 Jan]Ski Course Rating
- luogu P3101 [USACO14JAN]滑雪等级Ski Course Rating
- [Usaco2009 Jan]安全路经Travel dijkstra + 并查集
- USACO Ski Course Design
- Ski Course Design
- usaco Ski Course Design
- usaco Ski Course Design
- bzoj 3893: [Usaco2014 Dec]Cow Jog 并查集+单调队列
- union find并查集 (algorithm course Of Princeton )
- [并查集&&BFS]PAT1021 Deepest Root
- zoj3811Untrusted Patrol((bfs+并查集)
- codeforces 659F (并查集 bfs)
- (并查集 or BFS+二分)HDU5652
- hdu 5945 bfs+并查集
- HDU 5652 二分+并查集+BFS
- jzoj 1729_blockenemy_并查集+bfs
- 浅谈HTTPS安全传输原理
- Codeforces 463D Gargari and Permutations DP(LCS变形)
- select2切换事件如何生效
- 基于Python的图像手绘效果
- hdu1045Fire Net (最大匹配)
- bzoj3430 [Usaco2014 Jan]Ski Course Rating 并查集+bfs
- 快速纯RN开发(无需搭native环境):CRNA+Expo
- LVS--搭建一个LVS-nat,负载均衡 WordPress (5)
- Android实现手机相机
- 爬虫之黑龙江科技大学 URP大战-yellowcong
- Halcon与Opencv图像数据格式转换
- 【PAT】甲级1018
- HDU2025查找最大元素
- python中字典的常用操作命令及注意事项