题目

Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直接或者是间接都可以)。本题中所涉及的通信渠道都是 双向 的。

Tyvj是一个公益性的网站,没有过多的利润,所以你要尽可能的使费用少才可以。

目前你已经知道,Tyvj的通信渠道分为两大类,一类是必选通信渠道,无论价格多少,你都需要把所有的都选择上;还有一类是选择性的通信渠道,你可以从中挑选一些作为最终管理员联络的通信渠道。

数据保证给出的通信渠道可以让所有的管理员联通。

注意: 对于某两个管理员 u,v,他们之间可能存在多条通信渠道,你的程序应该累加所有 u,v 之间的必选通行渠道。

输入格式
第一行两个整数 n,m 表示Tyvj一共有 n 个管理员,有 m 个通信渠道;

第二行到 m+1 行,每行四个非负整数,p,u,v,w 当 p=1 时,表示这个通信渠道为必选通信渠道;当 p=2 时,表示这个通信渠道为选择性通信渠道;u,v,w 表示本条信息描述的是 u,v 管理员之间的通信渠道,u 可以收到 v 的信息,v 也可以收到 u 的信息,w 表示费用。

输出格式
一个整数,表示最小的通信费用。

数据范围
1≤n≤2000
1≤m≤10000
输入样例:
5 6
1 1 2 1
1 2 3 1
1 3 4 1
1 4 1 1
2 2 5 10
2 2 5 5
输出样例:
9

思路

  • 题目就是要求再已经连上某一些边的基础上,求最小生成树,其实用Kruskal算法就可以解决这个问题,只不过枚举的边是可选择的边,如果是必选的直接连上即可

代码

#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 2010, M = 10010;int n, m;
struct Edge
{int a, b, w;bool operator< (const Edge &t) const{return w < t.w;}
}e[M];
int p[N];int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main()
{cin >> n >> m;for (int i = 1; i <= n; i ++ ) p[i] = i;int res = 0, k = 0;for (int i = 0; i < m; i ++ ){int t, a, b, w;cin >> t >> a >> b >> w;if (t == 1)//如果是必选边,就直接加上{res += w;p[find(a)] = find(b);}else e[k ++ ] = {a, b, w};}sort(e, e + k);for (int i = 0; i < k; i ++ )//之后对于可以选择的边做一次Kruskal算法即可{int a = find(e[i].a), b = find(e[i].b), w = e[i].w;if (a != b){p[a] = b;res += w;}}cout << res << endl;return 0;
}

AcWing 1143. 联络员相关推荐

  1. AcWing 1143 联络员

    题目描述: Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都 ...

  2. 1143 联络员(kruskal算法)

    1. 问题描述: Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员 ...

  3. 算法——AcWing算法提高课中代码和题解

    文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...

  4. 【图论专题】最小生成树及其简单应用

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1140. 最短网络 prim模板 AcWing 1141. 局域网 kruskal模板 AcWing 1142. 繁忙的都市 ...

  5. AcWing-算法提高课【合集】

    算法提高 动态规划 数字三角形 1015. 摘花生 1018.最低通行费 1027. 方格取数 最长上升子序列LIS 1017. 怪盗基德的滑翔翼 1014.登山 482.合唱队形 1012. 友好城 ...

  6. 【算法提高——第三讲(一)】图论

    来自:算法提高课 文章目录 第三章 图论 3.1 单源最短路的建图方式 3.1.1 1129. 热浪 3.1.2 1128. 信使 3.1.3 1127. 香甜的黄油 3.1.4 1126. 最小花费 ...

  7. PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA、最低公共祖先

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:二叉搜索树的中序遍历是隐含给定的,它的中序遍历就是从小到大排列. 所以这道题先是根据给定的前序遍历和中序遍历,建树. 建树的时候需要用 ...

  8. 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)

    文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...

  9. AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)

    AcWing 734. 能量石 #include<cstdio> #include<algorithm> #include<cstring> #include< ...

最新文章

  1. 渝北统景碑口规划开发_渝北将又添“大水缸”御临河上将形成2.9平方公里人工湖面...
  2. 《数学之美》第19章 谈谈数学模型的重要性
  3. python播放本地视频教程_怎样用python播放视频
  4. 四.Android adb命令(持续更新...)
  5. 添加用户信息的方法java_添加用户的流程分析
  6. 在上位计算机控制时不能将s7-200,PLC控制统编程题库.doc
  7. 【Notepad++】Notepad++ 插件 for js 各种插件全介绍
  8. java向指定文件写入内容
  9. python编程遍历_Python字典遍历操作实例小结
  10. 电梯的测试用例的设计点
  11. COJ 0967 WZJ的数据结构(负三十三)
  12. ASPJpeg和ASPUpload组件的一些属性和方法
  13. 2021-2024年中国两轮电动车企业经营情况对比
  14. ipad尺寸html,HTML5之viewport标签,用于iPhone、iPad等手机网页开发。
  15. 黑群晖Apache Http Server 启动失败错误
  16. Ubuntu VirtualBox虚拟机安装win7 win10全过程
  17. P1359 租用游艇 洛谷
  18. 【微信小程序】微信小程序项目+仿哔哩哔哩b站
  19. JavaScript制作网页时钟
  20. Android 智能硬件的理解(2018.5.25)

热门文章

  1. 【产品实战-乘风游旅游App】0.0 写在前面
  2. 解决chrome浏览器图标缓存问题
  3. 在win10中如何运行c语言,Win10技巧:如何把“运行”固定到开始菜单?
  4. linux系统的烤机软件,NVIDIA英伟达 GeForce8/9/100/200/300/400/500/GeForce 600系列显卡Linux驱动...
  5. python实现图片转文字的记录
  6. stegsolve各种用法总结 攻防世界Misc What-is-this
  7. 霜冻前夜介绍 BBeat 演出播放器
  8. 【对数】YY(jzoj 1438)
  9. java 秒杀_JAVA秒杀实现以及优化原理
  10. 2019年天猫年货节淘客文案(全网节日淘客文案通用最新版持续更新)