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 ...
随机推荐
- 多个commit合并为一个
在进行多个commit合并成一个博客编写的过程中,你可以使用以下代码示例作为参考: # 合并多个commit git rebase -i HEAD~N # N代表需要合并的commit数目,例如合并最 ...
- 图像格式及Matlab的格式转换
1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点doubl ...
- 偷师MapStruct
转自自己的qq空间 2022年10月26日 一个项目看三遍 每遍都有新发现 嘿嘿嘿 我是代码小偷
- 文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题
文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题 三.要求用最小堆实现最小优先队列,请写出 HEAP-MINIMUM.HEAP-EXTRACT-MIN.HEAP DE ...
- Linux 性能监控与分析相关的软件包
检测系统进程和资源使用情况 -- procps-ng procps-ng是一个用于检测Linux系统进程和资源使用情况的系统工具,它是procps的一个重写版本.它提供了多种用于检测Linux系统中进 ...
- 【hack】浅浅说说自己构造hack的一些逻辑~
怎么说呢,相信很多考过竞赛的同学都会在平时的练习/考试中遭遇过100分但没有AC的情况,结果一看评测结果:subtask的数据点没过! 这时候就是遇到hack数据了,如果被这类数据卡住,说明你的代码可 ...
- 【解惑】介绍三大数据库的with语句的写法及使用场景
WITH 子句通常被称为 "Common Table Expressions"(CTE),俗称内存临时表,当使用 WITH 语句时,应注意具体的数据库版本和支持情况.以下是对 My ...
- Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇记录了用docker搭建ElasticS ...
- ETL之apache hop数据增量同步功能
ETL增量数据抽取CDC 概念:Change Data Capture,变化的数据捕获,也称:[增量数据抽取](名词解释) CDC是一种实现数据的增量抽取解决方案,是实现[ETL整体解决方案]中的一项 ...
- Mybatis插件功能
1 插件的作用 在Mybatis执行SQL的生命周期中,会使用插件进行埋点,主要包括Executor.StatementHandler.ParameterHandler和ResultSetHandle ...