题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4883

首先,注意到每个点可横可竖,但花费一样;

所以考虑行列的交集,那么这个条件可以转化为行点和列点之间的边,边权就是花费;

如果行和列都按原图交点连了边,那么问题就转化成在有向图中,每个点(原图的行/列)都有且仅有1入度;

这个性质让我们联想到基环树,所以只需要构造一个基环树森林即可;

又要边权和最小,仿照 Kruskal,从小到大加边,对于连通块,看看是否已经有环即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const xn=2e5+;
int n,m,ct,fa[xn];
ll ans;
bool v[xn];
struct N{int u,v,w;}ed[xn<<];
bool cmp(N x,N y){return x.w<y.w;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
int main()
{
n=rd(); m=rd();
for(int i=;i<=n;i++)
for(int j=,z;j<=m;j++)
{
z=rd();
ed[++ct].u=i; ed[ct].v=j+n; ed[ct].w=z;
}
for(int i=;i<=n+m;i++)fa[i]=i;
sort(ed+,ed+ct+,cmp);
for(int i=;i<=ct;i++)
{
int x=find(ed[i].u),y=find(ed[i].v),w=ed[i].w;
if(x==y)
{
if(v[x])continue;
else ans+=w,v[x]=;
}
else
{
if(v[x]&&v[y])continue;
else if(v[x]||v[y])ans+=w,fa[x]=y,v[y]=;
else ans+=w,fa[x]=y;
}
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Cas 介绍及使用
  2. aes rsa加密
  3. RBAC用户权限管理数据库设计
  4. Web开发者宝典:10款流行前沿矢量图形素材
  5. 点击div外面该div消失(二)
  6. Activiti 删除流程定义
  7. subclipse安装后从svn资源库视图check out的资源无法创建server
  8. Inno Setup的常用脚本
  9. C开源hash项目uthash
  10. centos安装与基本使用
  11. 网络请求的null值处理
  12. Margin和Padding之间的区别
  13. c++ string类型转换为char *类型
  14. Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
  15. OpenGL+VS2013+WIN7(64)组态
  16. 关于在Java EE 下开发web,出现项目中的外部包没有tomcat的包的原因
  17. Windows CE Notification API的使用方法
  18. [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组
  19. [LeetCode] N-ary Tree Preorder Traversal N叉树的前序遍历
  20. 一.MySQL安装

热门文章

  1. buf.slice()
  2. windows枚举串口
  3. 转盘抽奖 canvas &amp; 抽奖 H5 源码
  4. 【BZOJ4583】购物(组合计数)
  5. 网易2018校招 合唱 DP
  6. springboot+idea+maven学习第一天(springboot入门,idea整合maven)
  7. Ubuntu 16.04升级4.7.0内核后导致Compiz奔溃,问题:compiz[4852]: segfault at 48 ip 00007f88cae087f0 sp 00007ffce354c268 error 4 in libscale.so
  8. spring依赖注入中获取JavaBean
  9. dtrace.org
  10. iframe显示滚动条