首页 > 其他分享 >Luogu P3366 Code

Luogu P3366 Code

时间:2024-06-02 10:43:47浏览次数:12  
标签:Code Point int Luogu 算法 fa second P3366

这道题有2种解法,分别是 \(Kruskal\) 算法 和 \(Prim\) 算法

\(Kruskal\) 算法

实现方法:从小到大遍历每一条线,如果该线连接的两点已经都在树内则不处理,否则描出这条线

使用并查集维护该树

代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 5;

pair<int, pair<int, int>> g[N];  // The weight on the line between Point A and Point B, Point A, Point B

int fa[N];  // Father Point

int f(int x) {  // Finding Point X's Extra Grandpa
    if (fa[x] == x) return x;
    return fa[x] = f(fa[x]);
}

int main() {
    int m, n;
    cin >> n >> m;
    for (int i = 1, u, v, w; i <= m; i++)  // Saving
        cin >> u >> v >> w,
        g[i].first = w,
        g[i].second.first = u,
        g[i].second.second = v;
    for (int i = 1; i <= n; i++) fa[i] = i;  // Initialize All Points' Father as themselves
    sort(g + 1, g + m + 1);
    int ans = 0, cnt = 0;  // Use cnt to make sure that all point was connected
    for (int i = 1; i <= m; i++) {
        int u = g[i].second.first, v = g[i].second.second, w = g[i].first;  // Reading
        if (f(u) == f(v)) continue;  // Had been connected
        ans += w, fa[f(v)] = fa[u], cnt++;  // Add the weight, connect Point V and Point U
    }
    if (cnt == n - 1) cout << ans << endl;  // If there's n points, then there will be connecting for n - 1 times
    else cout << "orz" << endl;  // Some points didn't connected
    return 0;
}

\(Prim\) 算法

本人不会 待更新

标签:Code,Point,int,Luogu,算法,fa,second,P3366
From: https://www.cnblogs.com/bramble-marshall/p/18226868

相关文章

  • 【LeetCode:575. 分糖果+ 哈希表】
    ......
  • AtCoder Beginner Contest 356
    A-SubsegmentReverse(abc356A)题目大意给定一个\(1,2,3,...,n\)的排列\(a\),给定两个数\(l,r\),左右颠倒\(a[l..r]\)。输出。解题思路按照题意模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::......
  • LeetCode 1652. 拆炸弹
    1652.拆炸弹你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。如果 k>0 ,将第 i 个数字用 接下来 k 个数字之和替换。如果 k<0 ,......
  • 如何在VScode上写一篇MarkDown文档
    如何在VScode上写一篇MarkDown文档1.首先需要安装插件2.新增一个MarkDown文件3.编写如下文案4.生成MarkDown格式文档和大纲一级标题Markdown二级标题三级标题后续加#类推字体加粗倾斜加粗倾斜删除高亮这是上标这是下标引用引用第一段分割线居中中......
  • Q3 LeetCode34 在排序数组中找起始位置
    提交错误:数组访问越界1.验证数组越界的语句要放在执行语句的前面,要不然前面报错无法进行到后面部分2.本题使用两次二分查找,左边界找到后,将rigiht指针设置成mid-1,继续查找更左的边界,右边界同理将left设置成mid+13.newint[]{1,1}  新数组创建方式 1classSolution{......
  • (nice!!!)LeetCode 2928. 给小朋友们分糖果 I(枚举、容斥原理)
    2928.给小朋友们分糖果I思路:方法一,三层for循环直接暴力枚举,时间复杂度0(n^3)classSolution{public:intdistributeCandies(intn,intlimit){intans=0;for(inti=0;i<=n&&i<=limit;i++){for(intj=0;j<=n&&j<=limit;j++){......
  • atcoder350,351,352,353,354,355期部分题解
    声明:有些题感觉已经说到很明白了,就先不写代码了,有空会补上目录350D: newfriend350E:toward0351D:GridandMagnet352D:permutation subsequence353C:sigmaproblem353D:anothersigmaproblem354C:atcodermagics355C:bingo2355D:intersectingintervals......
  • AtCoder Beginner Contest 355 (E,F)
    总结:这把B都错题了一直Wa,然后队友告诉我说F貌似可做,写了半个小时F发现题目读假了,于是四题下班。E-GuesstheSum题目大意:给定一个隐藏的、长度为N的数组,下标从0开始,题目给定L,R,要你用最少的询问次数求出\(\sum_{i=L}^{R}a_{i}\)。对于每次询问,可以选择一个i和j,然......
  • 写一个 vscode 插件
    HxTranslate这是一个vscode扩展插件示例,参考:YourFirstExtension,可将helloworld更改为自己的扩展插件名称如:HxTranslate,其余默认即可.建议使用文心一言解答疑问.注意事项deepin终端运行:sudoaptinstallnodejs终端运行:npmi-gyogenerator-codety......
  • LeetCode 第15题:三数之和的解析
    大家好!本文我们将要探索的是LeetCode的第15题:三数之和。我们的目标是在一片数字的海洋中寻找三颗神奇的珍珠,它们的和为零。准备好了吗?让我们一同踏上这段充满挑战和乐趣的旅程吧!文章目录题目介绍解题思路思路1:暴力法思路2:双指针法思路3:哈希表法思路4:回溯法思......