原题

1.题意分析

题意就是给你很多组数,对于每组数,有三组小数据。第一组小数据先输入一个n表示顶点数,然后再输入n-1条边表示初始边数。其它组小数据先输入一个数k,表示增加的边的数量,然后再输入k条边,表示增加的边。在输入第二组小数据时,要先把边清空,重新输入,但是边的数量不变。

2.做法

题意不难理解,说白了就是最小生成树的板子题。很明显,对于每组数,可以分为两组大数据。第一组小数据是一组大数据;第二组和第三组小数据可以分为一组大数据。对于每组大数据,求出最小生成树,再把数据清空,再求一遍。就是最终的正解了

3.关于最小生成树

板子

板子题原题

kruskal最小生成树算法的详细分析

注意输入的换行,换行卡了我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]题解的更多相关文章

  1. HDU Computer Transformation1041 题解

    Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...

  2. 「POJ3436」ACM Computer Factory题解

    题意: 有很多台机器,可以把物件从一种状态改装成另一种状态,初始全为\(0\),最终状态全为\(1\),让你可以拼凑机器,请问最大总性能为多少,且要求输出方案. 题解: 这道题是真的水啊,我不想写太多 ...

  3. UVa 908 - Re-connecting Computer Sites

    题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...

  4. CF 1136A 1136B 1136C 1136D 1136E(Round546ABCDE)题解

    题目地址:https://codeforces.com/contest/1136 A: Nastya Is Reading a Book 题解:挨个判断即可,水题. 参考代码: #include< ...

  5. POJ3694:Network(并查集+缩点+lca)

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13172   Accepted: 4774 题目链接:htt ...

  6. HDU 2460 Network 傻逼Tarjan

    Network Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集

    题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...

  8. HDU4738 Caocao's Bridges —— 边双联通分量 + 重边

    题目链接:https://vjudge.net/problem/HDU-4738 A network administrator manages a large network. The networ ...

  9. 双连通分量(点-双连通分量&边-双连通分量)

    概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连 ...

  10. poj3694 缩点边双连通分量

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8669   Accepted: 3175 Descripti ...

随机推荐

  1. windows ce 5.0 + vs2005 + sql数据库_开发注意事项

    今天通过对RFID读写器(windows ce 5.0)的摸索以及实验总结出一下注意事项: 安装 vs2005 后要配置windows ce 的开发环境,从网上下载对应设备版本的SDK,安装后新建项目 ...

  2. P3574 [POI2014] FAR-FarmCraft 吐槽 + 题解

    洛谷上面的题解写的真的不太好,有很多错误,我来谈谈自己的理解. 设 \(f[i]\) 表示以 \(i\) 为根节点的子树中(包括节点 \(i\))的所有人安装好游戏所需要的时间(与下面的 \(g[i] ...

  3. BUUCTF-MISC-LSB(stegsolve的一种妙用)

    题目已知是LSB隐写 丢入stegsolve,点 > ,可以看见Red plane 0,Green plane 0,Blue plane 0上边好像有东西 点analyse->data e ...

  4. Linux 日志服务管理

    日志管理 1 系统日志管理 1 rsyslog系统日志服务 日志记录的内容包括: 历史事件:时间,地点,人物,事件 Jul 18 14:30:53 # 时间 ubuntu2204 # 地点 (在哪个主 ...

  5. Vue Cli起别名

    vue cli 3的写法 module.exports = { configureWebpack: { resolve:{ extensions:[], alias:{ 'assets':'@/ass ...

  6. python2.7源码安装方式

    安装python2.7 下载Python 2.7, 下载地址 解压安装 tar -xzvf Python-2.7.15.tgz cd Python-2.7.15 ./configure --prefi ...

  7. python处理类似json的文件

    前言 有些文件长得像json的键值对格式,但又不完全是.有时需要提取出其中某些值,可以先手动处理成json文件,然后用python的json模块. 示例1:每行键值对 提取其中的caseId的值 {& ...

  8. 终于搞懂了python2和python3的encode(编码)与decode(解码)

    终于搞懂了python2的编码 在python2下碰到非常多次的中文乱码,这次来梳理一下编码问题. 在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicode. un ...

  9. 深入理解 Flutter 图片加载原理

    前言 随着Flutter稳定版本逐步迭代更新,京东APP内部的Flutter业务也日益增多,Flutter开发为我们提供了高效的开发环境.优秀的跨平台适配.丰富的功能组件及动画.接近原生的交互体验,但 ...

  10. Vue的数据更新,页面不更新的解决办法

    可能原因 更新的数据跟源数据不是同一个,即不是同一个引用 解决办法 最稳妥的办法,可通过拿到源数据取索引的方式进行数据的更新,如: 有一个源数据叫:originData 那么如果在更新时,通过this ...