UVA908[Re-connecting Computer Sites]题解
1.题意分析
题意就是给你很多组数,对于每组数,有三组小数据。第一组小数据先输入一个n表示顶点数,然后再输入n-1条边表示初始边数。其它组小数据先输入一个数k,表示增加的边的数量,然后再输入k条边,表示增加的边。在输入第二组小数据时,要先把边清空,重新输入,但是边的数量不变。
2.做法
题意不难理解,说白了就是最小生成树的板子题。很明显,对于每组数,可以分为两组大数据。第一组小数据是一组大数据;第二组和第三组小数据可以分为一组大数据。对于每组大数据,求出最小生成树,再把数据清空,再求一遍。就是最终的正解了
3.关于最小生成树
注意输入的换行,换行卡了我10分钟
它终于来了
代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 100;
int parents[N];
struct edge
{
int from, to, val;
}edges[N];
bool cmp(edge a, edge b)
{
if(a.val != b.val)
{
return a.val < b.val;
}else
{
return a.from > b.from;
}
return a.to > b.to;
}
int cnt = 0;
void add(int u, int v, int w)
{
cnt++;
edges[cnt].from = u;
edges[cnt].to = v;
edges[cnt].val = w;
}
int Find(int n)
{
int last_find = n;
while(true)
{
if(parents[n] == n || parents[n] == last_find)
{
return n;
}
last_find = n;
n = parents[n];
}
}
int kruskal(edge* edges, int points, int bian)
{
int w = 0;
int cur_cnt = 0;
int ans = 0;
sort(edges + 1, edges + bian + 1, cmp);
while(cur_cnt < points-1)
{
w++;
int node_1 = Find(edges[w].from);
int node_2 = Find(edges[w].to);
if(node_1 != node_2)
{
parents[Find(node_1)] = parents[Find(node_2)];
ans += edges[w].val;
cur_cnt++;
}
// cout << cur_cnt << " " << w << endl;
// cout << ans << endl;
}
return ans;
}
void init(int n)
{
cnt = 0;
for(int i = 1;i <= n;i++)
{
parents[i] = i;
}
}
int main()
{
int ccnntt=0;
int n;
while(cin >> n)
{
if(ccnntt!=0){
cout<<endl;
}
ccnntt++;
init(n);
for(int i = 1;i < n;i++)
{
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
cout << kruskal(edges, n, n - 1) << endl;
init(n);
int k;
cin >> k;
for(int i = 1;i <= k;i++)
{
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
int m;
cin >> m;
for(int i = 1;i <= m;i++)
{
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
cout << kruskal(edges, n, k + m) << endl;
}
return 0;
}
UVA908[Re-connecting Computer Sites]题解的更多相关文章
- HDU Computer Transformation1041 题解
Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...
- 「POJ3436」ACM Computer Factory题解
题意: 有很多台机器,可以把物件从一种状态改装成另一种状态,初始全为\(0\),最终状态全为\(1\),让你可以拼凑机器,请问最大总性能为多少,且要求输出方案. 题解: 这道题是真的水啊,我不想写太多 ...
- UVa 908 - Re-connecting Computer Sites
题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...
- CF 1136A 1136B 1136C 1136D 1136E(Round546ABCDE)题解
题目地址:https://codeforces.com/contest/1136 A: Nastya Is Reading a Book 题解:挨个判断即可,水题. 参考代码: #include< ...
- POJ3694:Network(并查集+缩点+lca)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13172 Accepted: 4774 题目链接:htt ...
- HDU 2460 Network 傻逼Tarjan
Network Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集
题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...
- HDU4738 Caocao's Bridges —— 边双联通分量 + 重边
题目链接:https://vjudge.net/problem/HDU-4738 A network administrator manages a large network. The networ ...
- 双连通分量(点-双连通分量&边-双连通分量)
概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连 ...
- poj3694 缩点边双连通分量
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8669 Accepted: 3175 Descripti ...
随机推荐
- 据说,Transformer 不能有效地进行时间序列预测?
简介 几个月前,我们介绍了 Informer 这个模型,相关论文 (Zhou, Haoyi, et al., 2021) 是一篇获得了 AAAI 2021 最佳论文奖的时间序列论文.我们也展示了一个使 ...
- MODBUS-TCP转Ethernet IP 网关连接空压机配置案例
本案例是工业现场应用捷米特JM-EIP-TCP的Ethernet/IP转Modbus-TCP网关连接欧姆龙PLC与空压机的配置案例.使用设备:欧姆龙PLC,捷米特JM-EIP-TCP网关, ETHER ...
- python3.8下安装robotframework历险记
首先非常感谢本文章博主,极大的给与我可以装好的信心(差点要重装python)https://blog.csdn.net/qq_21583077/article/details/107848409?sp ...
- Tomcat启动时出现乱码的解决方式
在网上下载了一个版本号为apache-tomcat-8.5.38的Tomcat,因为这个Tomcat一直没有用过,所以今天启动时出现了如下乱码: 解决方案: 找到Tomcat目录下conf文件夹中的l ...
- C#中IsNullOrEmpty和IsNullOrWhiteSpace的使用方法有什么区别?
前言 今天我们将探讨C#中两个常用的字符串处理方法:IsNullOrEmpty和IsNullOrWhiteSpace.这两个方法在处理字符串时非常常见,但是它们之间存在一些细微的区别.在本文中,我们将 ...
- 基于AidLux的自动驾驶智能预警应用方案
### 1. 自动驾驶感知算法及AidLux相关方案介绍 #### 1.1自动驾驶 自动驾驶汽车,又称无人驾驶车.电脑驾驶车.无人车.自驾车,是一种需要驾驶员辅助驾驶或者完全不需要操控的车辆.作为自动 ...
- Django学习笔记:第二章django的安装和创建应用
1.安装Django 终端运行 pip install django 查看django是否安装成功 python -m django --version 1.1 安装虚拟环境 在控制台运行 pip i ...
- 深入Scikit-learn:掌握Python最强大的机器学习库
本篇博客详细介绍了Python机器学习库Scikit-learn的使用方法和主要特性.内容涵盖了如何安装和配置Scikit-learn,Scikit-learn的主要特性,如何进行数据预处理,如何使用 ...
- cesium中文网
http://cesium.xin/cesium/cn/Documentation1.62/CallbackProperty.html
- 2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar
2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar ...