图-hdu-1233
来源:互联网 发布:如何查手机mac地址 编辑:程序博客网 时间:2024/05/21 05:58
问题
题目:[hdu-1233]http://acm.hdu.edu.cn/showproblem.php?pid=1233
思路
这个题是MST,不多说了。
结合UnionFindSet搞定联通分量的合并。
代码
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#define N 100//#define LOCALusing std::vector;using std::sort;int tree[N + 8];void make_set( int n ){ for(int i = 1; i <= n; ++i){ tree[i] = -1; }}int find_set(int i){ if( -1 == tree[i] ) return i; else{ int ret = find_set( tree[i] ); tree[i] = ret; return ret; }}bool union_set(int i, int j){ int a = find_set(i); int b = find_set(j); if(a==b) return false; else{ tree[b] = a; return true; }}struct Edge{ int u; int v; int c; Edge(){memset(this, 0, sizeof(Edge));} bool operator<(const Edge& rhs) const { return this->c < rhs.c; }};int main(void){#ifdef LOCAL freopen( "../data/input.dat", "r", stdin );#endif int n = 0; while( scanf( "%d", &n ) != EOF, n != 0 ){ vector<Edge> edge_list; Edge tmp; int sz = n*(n-1)/2; for(int i = 0; i < sz; ++i ){ scanf( "%d%d%d", &tmp.u, &tmp.v, &tmp.c ); edge_list.push_back(tmp); } sort(edge_list.begin(), edge_list.end()); make_set(n); int ans = 0; int cnt = 0; for( int i = 0; i < sz; ++i ){ int& a = edge_list[i].u; int& b = edge_list[i].v; if( union_set(a, b) ){ ++cnt; ans += edge_list[i].c; if(cnt == n-1) break; } } printf( "%d\n", ans ); }}
阅读全文
0 0
- 图-hdu-1233
- hdu 1233
- hdu 1233
- hdu 1233
- HDU 1233
- hdu 1233
- hdu-1233
- hdu 1233
- HDU 1233
- HDU 1233
- HDU 1233
- HDU 1233
- HDU 1233
- hdu 1233
- HDU 1233
- hdu 1233
- hdu 1233 kruskal
- HDU-1233(prim写法)
- Docker + Swarm + etcd 集群搭建
- 改进型分频器
- [无线安全]玩转无线电——不安全的蓝牙锁
- Ubuntu install Python3.6
- 自定义TextView字间距
- 图-hdu-1233
- Fastest VPN for China
- ubuntu多节点安装kubernetes
- idea解决maven pom依赖下载失败
- av_packet_free error
- Xmanager 地址 序列号
- 项目管理-PMP-第2章 组织和项目生命周期及管理过程
- 我的小工具-nodejs串口转TCP调试通信
- CTR预估中GBDT与LR融合方案