zoukankan      html  css  js  c++  java
  • Prim+堆优化

    详见代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define maxn 2000010
    #define IL inline
    #define M(x,y) make_pair(x,y)
    IL void read(int &x)
    {
        x=0;int f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0',ch=getchar();}x*=f;
    }
    
    int n,m,tot,cnt,ans;
    int first[maxn],vis[maxn];
    struct edge{
        int nextx,to,val;
    }e[maxn];
    priority_queue<pair<int,int> >Q;
    
    void add(int u,int v,int w)
    {
        tot++;
        e[tot].nextx=first[u];
        first[u]=tot;
        e[tot].to=v;
        e[tot].val=w;
    }
    
    int prim()
    {
        Q.push(M(0,1));
        while(!Q.empty()&&cnt<n)
        {
            int now=Q.top().second;
            int w=Q.top().first;
            Q.pop();
            if(vis[now])continue;
            vis[now]=1;
            ans+=w;
            cnt++;
            for(int i=first[now];i;i=e[i].nextx)
                if(!vis[e[i].to])
                    Q.push(M(-e[i].val,e[i].to));
        }
        return -ans;
    }
    
    int main()
    {
        read(n),read(m);
        for(int i=1;i<=m;i++)
        {
            int a,b,c;
            read(a),read(b),read(c);
            add(a,b,c),add(b,a,c);
        }
        cout<<prim();
        return 0;
    }
  • 相关阅读:
    LAMP搭建示例
    MySQL主从
    list多字段去重
    mysql按照某一个条件进行分组统计,同时又要保证一个相同字段的数据只统计一次
    sentinel自定义异常处理
    sentinel规则持久化
    zookeeper
    shiro
    iframe之间传递参数
    自定义标签
  • 原文地址:https://www.cnblogs.com/KGW-/p/11793979.html
Copyright © 2011-2022 走看看