zoukankan      html  css  js  c++  java
  • MST算法

    Kruskal

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define INF 0x3f3f3f3f
     4 #define M(a, b) memset(a, b, sizeof(a))
     5 const int N = 1e3 + 10, maxn = 1e4 + 10;
     6 int p[N], n, m;
     7 struct Edge {
     8     int u, v, w;
     9     bool operator < (const Edge rhs) const {
    10         return w < rhs.w;
    11     }
    12 }e[maxn];
    13 
    14 int find(int u) {return u == p[u] ? u : find(p[u]);};
    15 
    16 int Kruskal() {
    17     int ans = 0;
    18     for (int i = 0; i < n; ++i) p[i] = i;
    19     sort(e, e+m);
    20     for (int i = 0; i < m; ++i) {
    21         int u = find(e[i].u), v = find(e[i].v);
    22         if (u != v) {
    23             p[v] = u;
    24             ans += e[i].w;
    25         }
    26     }
    27     return ans;
    28 }
    View Code

    Prim

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N = 1e4 + 5;
     4 bool vis[N];
     5 int n, m;
     6 struct Node {
     7     int v, w;
     8     bool operator < (const Node &rhs) const {
     9         return w > rhs.w;
    10     }
    11 };
    12 vector<Node> G[N];
    13 
    14 int Prim() {
    15     int ans = 0;
    16     M(vis, 0); vis[1] = 1;
    17     priority_queue<Node> q;
    18     q.push(Node{1, 0});
    19     int u = 1;
    20     for (int k = 1; k < n; ++k) {
    21         for (int i = 0; i < G[u].size(); ++i)
    22             if (!vis[G[u][i].v]) q.push(G[u][i]);
    23         while (!q.empty() && vis[q.top().v]) q.pop();
    24         ans += q.top().w;
    25         vis[q.top().v] = 1;
    26         u = q.top().v;
    27         q.pop();
    28     }
    29     return ans;
    30 }
    View Code
  • 相关阅读:
    私有 composer 包创建
    随机数是如何生成的
    TCP 三次握手的意义
    何为真何为假
    Python流程控制语句详解
    Python类中装饰器classmethod,staticmethod,property,
    函数进阶
    初识函数
    文件操作
    is ==小数据池编码解码
  • 原文地址:https://www.cnblogs.com/robin1998/p/6760126.html
Copyright © 2011-2022 走看看