打井

题目

该题是一个最小生成树的好题,但是比起一般的最小生成树来说他不仅仅有各个井相连,而且还要和地下水相连,所以地下水我们也可以看成一口井。

代码

#include <bits/stdc++.h>
using namespace std;
struct edge {
int a, b, c;
}e[100100];
bool cmp(const edge &a, const edge &b)
{
return a.c < b.c;
}
int cnt, fa[100100], vis[1000][1000], ans;int n, m;
int find(int a)
{
if (fa[a] == a)
return a;
return fa[a] = find(fa[a]);
}
int main()
{ scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &e[++m].c);
e[m].a = 0, e[m].b = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
int a;
scanf("%d", &a);
if (!vis[i][j] || !vis[j][i])
{
vis[i][j] = vis[j][i] = 1;
e[++m].a = i, e[m].c = a, e[m].b = j;
}
}
sort(e + 1, e + 1 + m, cmp);
for (int i = 0; i <= n; i++)
fa[i] = i;
for (int i = 1; i <= m; i++)
{
if (cnt == n)
printf("%d", ans), exit(0);
if (find(e[i].a) != find(e[i].b))
{
fa[find(e[i].a)] = find(e[i].b);
ans += e[i].c;
// printf ("%d %d %d\n", e[i].b, e[i].a, e[i].c);
cnt++;
}
}
}

最新文章

  1. H5 video的使用
  2. 搜索 录音功能 Android api
  3. 《BI那点儿事》SQL Server 2008体系架构
  4. 如何正确的将J2ee项目部署到Tomcat
  5. SSD在SQLServer中的应用
  6. angularjs-$interval使用
  7. kettle使用log4j管理输出日志
  8. Android.mk中添加宏定义
  9. tomcat 7 用户设置
  10. NavigationBar--修改返回按钮的标题
  11. Linux学习之traceroute命令
  12. XML解析中的namespace初探
  13. 利用EF Core的Join进行多表查询
  14. 关于Linux虚拟化技术KVM的科普 科普四(From humjb_1983)
  15. C# 使用微软自带的Speech进行语音输出
  16. 用dx生成dex时遇到class name does not match path
  17. leetcode64
  18. POJ 3384 放地毯【半平面交】
  19. 【转】Skynet之消息队列 - 消息的存储与分发
  20. jenkins如何获取text parameter多行的文本内容

热门文章

  1. RNG牛掰!
  2. for 循环 以及基本的数据类型
  3. Python_每日习题_0006_斐波那契数列
  4. WinRAR从入门到高级的操作技巧集合
  5. Python之发邮件
  6. 生命周期函数以及vue的全局注册
  7. [官网]How to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux
  8. 【面试】MySQL的事务和索引
  9. Percona-xtrabackup 使用详解与原理
  10. 二进制安装MongoDB