From 5e9f7d6b136c084df55b05475220a871c73f129e Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Fri, 21 Jul 2017 20:28:01 +0800 Subject: [PATCH] Create 5723_qq_18661257.cpp From http://blog.csdn.net/qq_18661257/article/details/51958669 --- HDOJ/5723_qq_18661257.cpp | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 HDOJ/5723_qq_18661257.cpp diff --git a/HDOJ/5723_qq_18661257.cpp b/HDOJ/5723_qq_18661257.cpp new file mode 100644 index 0000000..ee63258 --- /dev/null +++ b/HDOJ/5723_qq_18661257.cpp @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include +#include +using namespace std; +const int MAXN = 1e6 + 5; +typedef long long LL; +struct edge { + int v, u, cost; + bool operator <(const edge &a) const { + return cost < a.cost; + } +} es[MAXN]; + +struct o { + int v, cost; + o() {} + o(int v, int cost):v(v), cost(cost) {} +}; + +int par[MAXN], ranks[MAXN]; +int sum[MAXN]; +bool vis[MAXN]; +int n, m; +double minres; +vectorG[MAXN]; + +void init(int sizes) {//初始化 + for(int i = 0; i <= sizes; i ++) { + par[i] = i; + ranks[i] = 1; + G[i].clear(); + } +} +int find(int x) { + return par[x] == x ? x : par[x] = find(par[x]); +} +bool same(int x,int y) { + return find(x) == find(y); +} +void unite(int x,int y) {//连接 + x = find(x); + y = find(y); + if(x == y)return ; + if(ranks[x] > ranks[y]) { + par[y] = x; + } else { + par[x] = y; + if(ranks[x] == ranks[y]) ranks[x] ++; + } +} +LL kruskal() {//最小生成树算法 + sort(es,es + m); + init(n); + LL ret = 0; + for(int i=0; i