zoukankan      html  css  js  c++  java
  • Prim 最小生成树模板

    Prim 最小生成树

    题目链接

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    
    inline ll read()
    {
    	int f=0,x=0;
    	char ch=getchar();
    	while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
    	while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^=48),ch=getchar();
    	return f?-x:x;
    }
    
    const int maxn=1000005;
    const int MAXN=123465789;
    
    struct node{
    	int to,w,nxt;
    }t[maxn];
    
    int n,m,tot,head[maxn],dis[maxn]; //链式前向星 
    bool vis[maxn];
    
    int ans,cnt,now=1;//Prim
    
    void add(const int u,const int v,const int w)
    {
    	t[++tot].to=v;
    	t[tot].w=w;
    	t[tot].nxt=head[u];
    	head[u]=tot;
    }
    
    void prim()
    {
    	for(int i=2;i<=n;++i)
    		dis[i]=MAXN;
    		
    	for(int i=head[1];i;i=t[i].nxt)
    		dis[t[i].to] = min(dis[t[i].to],t[i].w);
    	
    	while(++cnt<n)
    	{
    		int minn=MAXN;
    		vis[now]=1;
    		for(int i=1;i<=n;++i)
    		{
    			if(vis[i]) continue;
    			if(minn > dis[i])
    			{
    				minn=dis[i];
    				now=i;
    			}
    		} 
    		
    		ans+=minn;
    		
    		for(int i=head[now];i;i=t[i].nxt)
    		{
    			int y=t[i].to;
    			if(vis[y]) continue;
    			if(dis[y] > t[i].w)
    			{
    				dis[y]=t[i].w;
    			}
    		}
    	}
    }
    
    int main()
    {
    	n=read(),m=read();
    	for(int i=1;i<=m;++i)
    	{
    		int a=read(),b=read(),c=read();
    		add(a,b,c);
    		add(b,a,c);
    	}
    	prim();
    	printf("%d
    ",ans);
    }
    
  • 相关阅读:
    ajax发送cookies
    关于几个入口
    关于.net的概念
    codeproject
    Chrome extension
    modern web application
    JavaScript类型转换
    js方法在iframe父子窗口
    javascript book
    MVC Controller
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/13667721.html
Copyright © 2011-2022 走看看