[BZOJ 4883][Lydsy2017年5月月赛]棋盘上的守卫:最小生成树
来源:互联网 发布:argentum银霜 知乎 编辑:程序博客网 时间:2024/05/24 04:26
点击这里查看原题
对于每个点,可以选择守横向或者守纵向。每行为一个点,每列为一个点,于是对于w[i][j],在i与j+n之间连一条权值为w[i][j]的边,然后去求带一个环的最小生成树,这样刚好有n+m条边,而且每条边都连了一个横行和一个纵行,也就是每条边代表了一个守卫。
/*User:SmallLanguage:C++Problem No.:4883*/#include<bits/stdc++.h>#define ll long longusing namespace std;const int M=1e5+5;int n,m,tot,pre[M];bool v[M];ll ans;struct edge{ int u,v,w; bool operator<(const edge b)const{ return w<b.w; }}e[M];int get(int x){ return x==pre[x]?x:pre[x]=get(pre[x]);}int main(){ freopen("data.in","r",stdin);// scanf("%d%d",&n,&m); for(int i=1;i<=n+m;i++) pre[i]=i; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ int z; scanf("%d",&z); e[++tot]=(edge){i,j+n,z}; } } sort(e+1,e+tot+1); for(int i=1;i<=tot;i++){ int x=get(e[i].u),y=get(e[i].v); if(v[x]&&v[y]) continue; if(x!=y){ v[y]|=v[x]; pre[x]=y; } else v[x]=1; ans+=e[i].w; } printf("%lld\n",ans); return 0;}
0 0
- [BZOJ 4883][Lydsy2017年5月月赛]棋盘上的守卫:最小生成树
- bzoj 4883: [Lydsy2017年5月月赛]棋盘上的守卫 最小生成树
- 4883: [Lydsy2017年5月月赛]棋盘上的守卫
- BZOJ4883 [Lydsy2017年5月月赛]棋盘上的守卫
- BZOJ4883: [Lydsy2017年5月月赛]棋盘上的守卫
- bzoj 4880: [Lydsy2017年5月月赛]排名的战争
- BZOJ4882: [Lydsy2017年5月月赛]卡常生成树
- [BZOJ 4879][Lydsy2017年5月月赛]失控的数位板:模拟
- BZOJ 4881 [Lydsy2017年5月月赛] 二分图染色+线段树
- bzoj4879: [Lydsy2017年5月月赛]失控的数位板
- BZOJ4880 [Lydsy2017年5月月赛]排名的战争
- BZOJ4879: [Lydsy2017年5月月赛]失控的数位板
- BZOJ4880: [Lydsy2017年5月月赛]排名的战争
- 4880: [Lydsy2017年5月月赛]排名的战争
- bzoj4885: [Lydsy2017年5月月赛]长方体
- BZOJ4885: [Lydsy2017年5月月赛]长方体
- bzoj5049 [Lydsy2017年5月月赛]导航系统
- BZOJ 4801([Lydsy2017年4月月赛]打牌-分类讨论)
- mysql 开启自动提交
- java 常用集合类总结
- Docker在Windows上,微软使用DevOps重塑自己
- mysql 每天每个客户第一个报告
- 懂商业的技术合伙人(10):伟大的乔帮主,从不滥用绝学'降龙十八掌'
- [BZOJ 4883][Lydsy2017年5月月赛]棋盘上的守卫:最小生成树
- 旋转法列出所有排列
- 欢迎使用CSDN-markdown编辑器
- hdu 5091 beam cannon
- mybatis一些小技巧
- matplotlib.pyplot.figure
- 关于zkpython的安装方法
- 使用简单的python语句编写爬虫 定时拿取信息并存入txt
- 谁来拯救易到的困局 “补贴坑”该如何填?