家~人~们,帮~帮~忙~啊~prim和kruskal一个也不对(┭┮﹏┭┮)

P3366 【模板】最小生成树

~~我来~~ ##### …… 看见你这个名字,我瞬间感觉我不配…… (感到丢银(╥﹏╥))
by linhao2010 @ 2023-11-26 17:31:02


@[noipquanguojinjiang](/user/873786) kruskal 是因为 `Ufset` 写错了吧应该是 ```cpp void Ufset() { for(int i=1;i<=n;i++) parent[i]=i; } ```
by WilliamFranklin @ 2023-11-26 17:31:18


@[linhao2010](/user/802830) 额。。。日常发神经罢了()
by noipquanguojinjiang @ 2023-11-26 18:55:26


@[WilliamFranklin](/user/330901) 还是不对┭┮﹏┭┮
by noipquanguojinjiang @ 2023-11-26 19:01:47


@[noipquanguojinjiang](/user/873786) 因为这是模板,所以看看我是怎么写的吧,可以学习一下: ```cpp #include<bits/stdc++.h> using namespace std; inline int read() { int s = 0, f = 1; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-') f = -1; ch = getchar(); } while(isdigit(ch)) { s = (s << 1) + (s << 3) + (ch ^ 48); ch = getchar(); } return s * f; } struct node{ int to; int from; int money; }a[500005]; int fa[100005]; bool cmp(node b, node c) { return b.money < c.money; } void init(int n){ for (int i = 1; i <= n; i++) { fa[i] = i; } } int find(int i) { if (i == fa[i]) { return i; } else { fa[i] = find(fa[i]); return fa[i]; } } void w(int i, int j) { fa[find(i)] = find(j); } int main(){ int n, m; n = read(); m = read(); int u, v, mo; init(n); for (int i = 1; i <= m; i++) { a[i].from = read(); a[i].to = read(); a[i].money = read(); if(a[i].to == a[i].from){ i--; m--; } } sort(a + 1, a + m + 1, cmp); int sum = 0; long long ans = 0; for (int i = 1; i <= m && sum < n; i++) { if(find(a[i].to) != find(a[i].from)){ ans += a[i].money; w(a[i].to, a[i].from); sum++; } } if(sum != n - 1) { printf("orz"); } else{ printf("%lld", ans); } } ```
by WilliamFranklin @ 2023-11-26 19:08:46


@WilliamFrankl 谢谢
by noipquanguojinjiang @ 2023-11-26 20:13:21


|