正题


题目大意

一张图,第iii个点参加任务需要mkimk_imki​元,连接一条边需要一定费用,要求每个联通图都有参加任务的点,求最小费用。


解题思路

其实就是求若干个最小生成树然后这个最小生成树的权值就是这个棵树的所有边权加上最小的点权。我们使用KruskalKruskalKruskal来求,我们每次合并两个联通块时可以减少两个联通块的最小点权中较大的费用。

也就是我们定义costicost_icosti​表示iii这个联通块中的最小点权,若我们合并一条边x−>yx->yx−>y可以减少的费用是max{max{costx,costy}−w,0}max\{max\{cost_x,cost_y\}-w,0\}max{max{costx​,costy​}−w,0}
然后我们也是先将边排序然后处理即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1100;
struct node{int x,y,w;
}a[N*N];
int n,tot,ans,fa[N],cost[N];
bool cmp(node x,node y)
{return x.w<y.w;}
int find(int x)
{if(fa[x]==x) return x;return fa[x]=find(fa[x]);
}
void unionn(int x,int y)
{int Fa=find(x),Fb=find(y);if(Fa<Fb) fa[Fb]=Fa,cost[Fa]=min(cost[Fa],cost[Fb]);else fa[Fa]=Fb,cost[Fb]=min(cost[Fa],cost[Fb]);return;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){int x;scanf("%d",&x);a[++tot].x=i;a[tot].y=j;a[tot].w=x;}for(int i=1;i<=n;i++)scanf("%d",&cost[i]),fa[i]=i,ans+=cost[i];sort(a+1,a+1+tot,cmp);for(int i=1;i<=tot;i++){int fx=find(a[i].x),fy=find(a[i].y);if(fx==fy||a[i].w>max(cost[fx],cost[fy])) continue;ans-=max(max(cost[fx],cost[fy])-a[i].w,0);unionn(fx,fy);}printf("%d",ans);
}

jzoj3237-间谍派遣【最小生成树,并查集】相关推荐

  1. hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊  就是注意一点 输入边的信息时,角标 ...

  2. 4th 【最小生成树并查集】征兵

    征兵 [题目描述]: 一个国王,他拥有一个国家.最近他因为国库里钱太多了,闲着蛋疼要征集一只部队要保卫国家.他选定了N个女兵和M个男兵,但事实上每征集一个兵他就要花10000RMB,即使国库里钱再多也 ...

  3. hdu 1232 畅通工程 最小生成树 并查集

    1232的连接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include <iostream>#include <cstdio& ...

  4. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)

    显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...

  5. jzoj3237 间谍派遣

    题目大意 链接 给出 n n n个点,其中一个点 i i i与另一个点 j j j之间有一条边权为 g i , j g_{i,j} gi,j​的边,每一个点 i i i与点 m m m之间有一条边权为 ...

  6. jzoj2940-生成输入数据【最小生成树,并查集】

    正题 题目大意 给一个完全图的唯一一颗最小生成树,求完全图最小边权之和. 解题思路 我们考虑在计算最小生成树的时候,将两个联通块合并时,我们会选择连接这两个联通块的最小的边. 那么我们就可以让每个联通 ...

  7. 村村通工程 最小生成树+并查集

    问题 D: 村村通工程 时间限制: 1 Sec 内存限制: 128 MB 题目描述 某国有N个村子,M条道路,为了实现"村村通工程",现在要"油漆"N-1条道路 ...

  8. UVa1395(最小值最小生成树+并查集)

    //思路:用结构体保存一条边的信息(u,v,w),因为是求最小的生成树,所以把边排序后,从最小的边(起点)依次枚举可以构成的生成树 AC源码: #include <cstdio> #inc ...

  9. LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1 ,同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, w ...

最新文章

  1. VR变革已来!华为完成业界首个5G实验网下Cloud VR业务验证
  2. NTFS的交换数据流ADS应用
  3. OVS DPDK--数据结构关系(七)
  4. bzoj [Scoi2016]美味
  5. slam特征点深度 svd_SLAM初探:关于视觉SLAM的一些常识
  6. ping 监控网络延时
  7. git bash here创建项目无法选择m_git 版本控制初学者指南
  8. leetcode - 1024. 视频拼接
  9. 如何建立内核级钩子控制操作系统实现程序隐身
  10. 简哲,请让我的生活简单一点。——批《输入法破局研究——联盟推广》
  11. Ubuntu各个版本的介绍
  12. html5中get的特点,html4与html5的差异及html5的一些新特性
  13. GRE隧道封装协议及内核处理解析
  14. 为NanoPi M2 自制Debian镜像
  15. RabbitMQ在Docker中安装以及Management API returned status code 500错误
  16. 锁相环环路滤波器计算公式_锁相环计算方法.doc
  17. 线上支付、线下支付的功能对比
  18. Ipopt with Metis编译指南
  19. arch linux 删除文件,在linux/Archlinux下使用testdisk恢复误删文件
  20. 前端学习网络资源链接汇总

热门文章

  1. 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!
  2. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志
  3. php类的的属性值,PHP面向对象之旅:类的属性
  4. 超时锁定计算机,就会发现多了一个控制台锁定显示关闭超时选项
  5. excel怎么设置打印区域_别再浪费打印纸了!这样设置,Excel表格再大都能打印成一页!...
  6. 用计算机组成原理+唐朔飞的,计算机组成原理 唐朔飞 习题解答
  7. Java并发之volatile
  8. 剑指 Offer 05. 替换空格(两种做法)
  9. matlab常用函数辨析
  10. [JavaWeb-JavaScript]JavaScript_Function函数(方法)对象