奇怪问题求看看
查看原帖
奇怪问题求看看
519384
Link_Cut_Y楼主2023/1/29 20:48

本来用 map\text{map} 写的。后来嫌太慢写了个映射函数结果 WA\text{WA} 了一个点。求路过大神帮忙看看。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <unordered_map>
#define rep(i, a, b) for (int i = (a); i <= (b); i ++ )
#define rop(i, a, b) for (int i = (a); i < (b); i ++ )
#define dep(i, a, b) for (int i = (a); i >= (b); i -- )
#define dop(i, a, b) for (int i = (a); i > (b); i -- )

using namespace std;

using LL = long long;
using PII = pair<int, int>;
using PLL = pair<LL, LL>;

const int N = 20010;
int n, m, k, fa[N];
char a[100], b[100];
unordered_map<unsigned long long, int> id;

unsigned long long get(char *s) { // 映射成数字
	unsigned long long ans = 0;
	for (int i = 0; s[i]; i ++ )
		(ans += (s[i] - '0')) |= 0x343832743;
	return ans;
}
void init() { for (int i = 1; i <= n; i ++ ) fa[i] = i; }
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); }
void merge(int a, int b) {
	a = find(a), b = find(b);
	if (a == b) return;
	fa[a] = b;
}

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i ++ ) {
		scanf("%s", a); id[get(a)] = i;
	}
	init();
	while (m -- ) { scanf("%s%s", a, b); merge(id[get(a)], id[get(b)]); }
	scanf("%d", &k);
	while (k -- ) {
		scanf("%s%s", a, b);
		puts(find(id[get(a)]) == find(id[get(b)]) ? "Yes." : "No.");
	}
	return 0;
}

多么智障的问题啊!!!!!

验证码 meat 祭。(可我真的不想吃肉)

2023/1/29 20:48
加载中...