jungle roads

来源:互联网 发布:潮汕女孩知乎 编辑:程序博客网 时间:2024/06/15 03:45

题目网址:jungle roads

题目大意:指的是给你一个图,让你给出将所有节点相连接起来的最小的花销,花销与边权值是相对应的,最终输出最小的结果。这个输入是比其他稍微复杂点,给n表示村庄的数目,接下来n-1行,第一个字符是起点,第二个数字是表示与这个起点相邻的节点的个数,然后是相邻节点的字符和距离;

就是采用并查集来做,最小生成树的kruskal算法,直接给出源代码了。。

#include<iostream>#include<algorithm>using namespace std;int parent[30];int findroot(int x){if (parent[x] != x)parent[x] = findroot(parent[x]);return parent[x];}struct edge{int a, b;int cost;bool operator <(const edge &a)const{return cost < a.cost;}}e[80];int main(){int n;while (cin >> n&&n){for (int i = 0; i < n; i++)parent[i] = i;int size = 0;for (int i = 0; i < n - 1; i++){char a, b;int t;int co;cin >> a >> t;for (int i = 0; i < t; i++){cin >> b >> co;e[size].a = a - 'A';e[size].b = b - 'A';e[size].cost = co;size++;}}sort(e, e + size);int ans = 0;for (int i = 0; i < size; i++){int a = findroot(e[i].a);int b = findroot(e[i].b);if (a != b){parent[a] = b;ans += e[i].cost;}}cout << ans << endl;}return 0;}


原创粉丝点击