玄学错误qwq
  • 板块P1194 买礼物
  • 楼主emiermao
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/3/20 11:52
  • 上次更新2023/11/5 01:51:18
查看原帖
玄学错误qwq
218051
emiermao楼主2021/3/20 11:52

RT,算了一下总空间也就不过大概295KB,一道125MB的题居然MLE了……orz

觉得问题应该是出在find函数上,因为把整篇代码里唯一有find的一行注释掉就不MLE了(结果

#include <bits/stdc++.h>
using namespace std;
struct edge {
	int fr, to;
	int v;
}e[25005];
int n;
bool cmp (edge a, edge b) {
	return a.v < b.v;
}
int fa[505];
int find (int p) {
	if (p == fa[p]) {
		return p;
	}
	fa[p] = find(fa[p]);
	return fa[p];
}
int ind = 0, A;
long long int kruskal () {
	sort(e + 1, e + ind + 1, cmp);
	long long int ans = 0, time = n - 1;
	for (int t = 1; t <= ind; t++) {
	    int p = find(e[t].fr), q = find(e[t].to);
		if (p == q) {
			continue;
		}
		fa[p] = q;
		ans += min(e[t].v, A);
		time--;
        if (time == 0) {
            break;
        }
	}
	return ans;
}
int main () {
	scanf("%d %d", &A, &n);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			int z;
			scanf("%d", &z);
			if (i == j || z == 0)
				continue;
			e[++ind].fr = i;
			e[ind].to = j;
			e[ind].v = z;
		}
	}
	for (int i = 1; i <= n; i++) {
		fa[i] = i;
	}
	printf("%lld\n", kruskal() + A);
	return 0;
}
2021/3/20 11:52
加载中...