Python作为数据收集如处理的神犇,适合数据的处理。内置带有高精度,集合,映射的数据类型,比较好用。。。
BUT!!!Python写算法就是另外一说了,用Python写UFS和C++写UFS根本就是天壤之别。那如果是珂朵莉树这样的数据结构结构呢。。。 自己想去吧~~
再者,Python有许多算法都是提前写好的,所以初始运行时间较慢(没Java慢)。
综上所述,Python不适于用于OI
文末附按秩合并+路径压缩UFS
UFS C++
struct UFS {
vector<int> fa, ssz;
void clear(int n) {
fa.resize(n + 1), ssz.resize(n + 1, 1);
for(int i = 0; i <= n; i++) fa[i] = i;
}
int find(int n) {
if(fa[n] == n) return n;
return fa[n] = find(fa[n]);
}
void merge(int u, int v) {
int fu = find(u), fv = find(v);
if(fu == fv) return;
if (ssz[fu] > ssz[fv]) swap(fu, fv);
fa[fu] = fv, ssz[fv] += ssz[fu];
}
} ufs;
UFS Python
import numpy as np
class UnionFindSet:
def __init__(self, size):
self.fa = np.array(range(size + 1))
self.ssz = np.ones(size + 1, int)
def clear(self, size):
self.fa = np.array(range(1, size + 1), int)
self.ssz = np.ones(size + 1, int)
def find(self, u):
if self.fa[u] == u:
return u
self.fa[u] = self.find(self.fa[u])
return self.fa[u]
def merge(self, u, v):
fu = self.find(u)
fv = self.find(v)
if fu == fv:
return
if self.ssz[fu] > self.ssz[fv]:
fu, fv = fv, fu
self.fa[fu] = fv
self.ssz[fv] += self.ssz[fv]