#include <bits/stdc++.h>
using namespace std;
struct node {
int x, y, z, opt;
} edge[10020];
int n, m, cnt;
int fa[320];
long long sum;
bool cmp(node a, node b) {
return a.z < b.z;
}
int find(int x) {
if (x == fa[x]) return x;
return fa[x] = find(fa[x]);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
fa[i] = i;
for (int i = 1; i <= m; i++) {
cin >> edge[i].opt >> edge[i].x >> edge[i].y >> edge[i].z;
if (edge[i].opt == 1)
fa[edge[i].y] = edge[i].x, sum += edge[i].z;
}
sort(edge + 1, edge + m + 1, cmp);
for (int i = 1; i <= m; i++) {
if (edge[i].opt == 2) {
int x = find(edge[i].x), y = find(edge[i].y);
if (x == y)
continue;
cnt++;
fa[y] = x;
sum += edge[i].z;
}
}
cout << sum;
}
好像是find函数的问题