栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构1-3】集合【持续更新中】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构1-3】集合【持续更新中】

P1551 亲戚

题目链接:P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include 
using namespace std;
int fa[5005], Rank[5005];

int find(int x) {
	if (x == fa[x]) {
		return x;
	} else {
		fa[x] = find(fa[x]);
		return fa[x];
	}
}

void merge(int i, int j) {
	int x = find(i), y = find(j);
	if (Rank[x] <= Rank[y]) {
		fa[x] = y;
	} else {
		fa[y] = x;
	}
	if (Rank[x] == Rank[y] && x != y) {
		Rank[y]++;
	}
}

int main() {
	int n, m, p, x, y;
	cin >> n >> m >> p;
	for (int i = 1; i <= n; i++) {
		fa[i] = i;
		Rank[i] = 1;
	}
	for (int i = 0; i < m; i++) {
		cin >> x >> y;
		merge(x, y);
	}
	for (int i = 0; i < p; i++) {
		cin >> x >> y;
		if (find(x) == find(y)) {
			cout << "Yes" << endl;
		} else {
			cout << "No" << endl;
		}
	}
	return 0;
}

参考博客:算法学习笔记(1) : 并查集 - 知乎 (zhihu.com) 

error: reference to 'rank' is ambiguous_荷叶田田-CSDN博客

P1536 村村通

题目链接:P1536 村村通 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include 
using namespace std;
int fa[1010], n, m;

int find(int x) {
	if (x == fa[x]) {
		return x;
	} else {
		fa[x] = find(fa[x]);
		return fa[x];
	}
}

void merge(int i, int j) {
	int x = find(i);
	int y = find(j);
	fa[x] = y;
}

int main() {
	while (true) {
		cin >> n;
		if (n == 0) {
			return 0;
		}
		cin >> m;
		for (int i = 1; i <= n; i++) {
			fa[i] = i;
		}
		int x, y;
		for (int i = 0; i < m; i++) {
			cin >> x >> y;
			merge(x, y);
		}
		int ans = 0;
		for (int i = 1; i <= n; i++) {
			if (i == find(i)) {
				ans++;
			}
		}
		ans--;
		cout << ans << endl;
	}
}
P3370 【模板】字符串哈希

题目链接:P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include 
#include 
#include 
using namespace std;
long long f[100010];

unsigned long long Hash(string s) {
	unsigned long long cnt = 0;
	for (int i = 0; i < s.size(); i++) {
		cnt = 233 * cnt + (unsigned long long)s[i];
	}
	return cnt;
}

int main() {
	int n, ans = 1;
	cin >> n;
	string s;
	for (int i = 0; i < n; i++) {
		cin >> s;
		f[i] = Hash(s);
	}
	sort(f, f + n);
	for (int i = 1; i < n; i++) {
		if (f[i] != f[i - 1]) {
			ans++;
		}
	}
	cout << ans;
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号