ACM模版

描述

题解

这个题用最小生成树的两个经典算法都可以过,用 Prim 算法相对容易写,只要再不断扩展的过程中判定究竟是建站消耗高还是建管道高,如果用 Kruskal 算法的话,则需要在生成最小树的过程中存树,然后 dfs 一遍做和前者同样的判定即可。

我用的是第二种,但是其实 Kruskal 算法还有更简单的解法,只消建一个超级源点即可,将所有站的建站消费都转化为边权连在超级源点上即可。

代码

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdio>using namespace std;const int INF = 0x3f3f3f3f;
const int MAXN = 333;
const int MAXM = 1e5;int map[MAXN][MAXN];
vector<int> tree[MAXN];int F[MAXN];struct Edge
{int u;int v;int w;
} edge[MAXM];int tol;
int vis[MAXN];void init()
{tol = 0;for (int i = 0; i < MAXN; i++){tree[i].clear();}memset(vis, 0, sizeof(vis));
}void addEdge(int u, int v, int w)
{edge[tol].u = u;edge[tol].v = v;edge[tol++].w = w;
}bool cmp(Edge a, Edge b)
{return a.w < b.w;
}int find(int x)
{if (F[x] == x){return x;}else{return F[x] = find(F[x]);}
}int Kruskal(int n)
{for (int i = 0; i <= n; i++){F[i] = i;}sort(edge, edge + tol, cmp);int cnt = 0;int ans = 0;for (int i = 0; i < tol; i++){int u = edge[i].u;int v = edge[i].v;int w = edge[i].w;int tOne = find(u);int tTwo = find(v);if (tOne != tTwo){ans += w;F[tOne] = tTwo;cnt++;tree[u].push_back(v);tree[v].push_back(u);}if (cnt == n - 1){break;}}if (cnt < n - 1){return -1;}else{return ans;}
}int ans;
int value[MAXN];void dfs(int root)
{for (int i = 0; i < tree[root].size(); i++){int tmp = tree[root][i];if (!vis[tmp]){vis[tmp] = 1;if (value[tmp] < map[root][tmp]){ans += value[tmp] - map[root][tmp];}dfs(tmp);}}
}int main()
{int K;cin >> K;int N;while (K--){init();cin >> N;int minValue = INF;int root = -1;for (int i = 0; i < N; i++){cin >> value[i];if (value[i] < minValue){minValue = value[i];root = i;}}vis[root] = 1;for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){cin >> map[i][j];if (i != j){addEdge(i, j, map[i][j]); }   }}ans = Kruskal(N);ans += minValue; dfs(root);cout << ans << '\n';}return 0;
}

NYOJ-1239-引水工程相关推荐

  1. NYOJ 1239 引水工程 【MST 变形】

    引水工程 时间限制: 2000 ms  |  内存限制: 65535 KB 难度: 3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性 ...

  2. nyoj 1239 引水工程 (河南省第八届acm程序设计大赛)

    题目1239 题目信息 运行结果 本题排行 讨论区 引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程, ...

  3. nyoj 1239 引水工程【最小生成树】虚拟节点

    引水工程 时间限制: 2000 ms  |  内存限制: 65535 KB 难度: 3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性 ...

  4. NYOJ 1239 引水工程【prim算法】

    引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程, ...

  5. NYOJ 1239 引水工程

    引水工程 时间限制: 2000 ms  |  内存限制: 65535 KB 难度:3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工 ...

  6. NYOJ - [第八届河南省程序设计大赛]引水工程(最小生成树)

    题目链接:http://nyoj.top/problem/1239 内存限制:64MB 时间限制:2000ms 题目描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投 ...

  7. 潍坊学院计算机系崔玲玲,人工免疫算法在引水工程中的应用.pdf

    人工免疫算法在引水工程中的应用.pdf 第 14卷第2期 潍坊学院学报 Vo1.14No.2 2014年 4月 JournalofWeifangUniversity Apr.2014 人工免疫算法在引 ...

  8. zzuoj 10409: D.引水工程

    10409: D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 33 [Submit][Status][Web Bo ...

  9. 第八届河南省赛D.引水工程(kruthcra+prime)

    D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board] D ...

  10. nyoj 1239-引水工程 //并查集

    1239-引水工程 内存限制:64MB 时间限制:2000ms 特判: No 通过数:58 提交数:130 难度:3 题目描述: 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成 ...

最新文章

  1. 基于OpenCV实战的图像处理:色度分割
  2. 让僵冷的翅膀飞起来—从实例谈OOP、工厂模式和重构[by Wayfarer]
  3. 在VS中设置比较和谐的字体和颜色的方法
  4. iOS CoreImage之滤镜简单使用
  5. 【TCP/IP】TCP的三次握手和四次挥手
  6. linux服务器 缓存,Linux服务器内存使用分析及内存缓存
  7. 【flutter环境问题】Downloading Dart SDK Flutter engine时卡着不动
  8. 如何利用FL Studio中文版做出失真效果
  9. springmvc 接收对象 滴灌摘要
  10. android蓝牙服务端设置,低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
  11. 数电(四)—使用译码器74138和门电路实现/写逻辑函数,使用8选1数据选择器74151实现实现L=∑m格式的3/多输入逻辑函数
  12. 计算机打音乐醉赤壁,抖音确认过眼神我遇上对的人是什么歌,醉赤壁歌曲介绍...
  13. note_14:excel 2016学生版遇到的某些问题
  14. 哪类人适合学软件测试?零基础能学测试吗?
  15. 号称最为简明实用的Django上手教程
  16. 第25节 虚拟专有网络原理及配置命令
  17. Oracle错误08s01,Java7 sqljdbc4 – getConnection()上的SQL错误08S01
  18. vue3+vite2多页面多路由 注意
  19. 原码 反码 补码 移码(变补)补码与移码的作用
  20. 4个顶级CAD制图软件,对照职业入手哦~

热门文章

  1. php ucenter原理,深入挖掘Discuz Ucenter同步登录过程原理分析
  2. php邮件服务器搭建,php发送邮件,不需要搭建邮件服务器方法
  3. 饥荒控制台指令【转自Steam社区】
  4. VBA Trim()函数 去除头部和尾部的空格 - VBA函数学习笔记(二)
  5. 计算机毕业设计Javavue架构云餐厅美食订餐系统(源码+系统+mysql数据库+lw文档)
  6. 基于反演法的悬架控制
  7. 插入法建立一个最大堆
  8. 关于IE10+不支持条件注释的解决办法
  9. 374. 猜数字大小
  10. visualvm 字体太小解决方案