prim 模板

#include<cstdio>
#include<vector>
#include<cstring>
#include<set>
#define maxn 5050
#define fi first
#define se second
using namespace std;
typedef pair<int,int> PII;
vector <PII> s[maxn];
int map[5001][5001];
int low_cost[maxn],zou[maxn],n,m,x,y,val,zhong,mi,ans;
int up(int x,int y,int val)
{
    for(int i=0;i<s[x].size();i++)
    {
        if(s[x][i].fi==y )
        {
            if( s[x][i].se>val)
            {
                s[x][i].se=val;
            }        
            return 1;
        }
    }
    return 0;
}
main(){
//    freopen("data.in","r",stdin);
    scanf("%d%d",&n,&m);
    memset(low_cost,127/3,sizeof(low_cost));
//    memset(map,127/3,sizeof(map));
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&val);
        if(x==y) continue;
//        map[x][y]=min(map[x][y],val);
//        map[y][x]=min(map[y][x],val);
        if(up(x,y,val))
            up(y,x,val);
        else
        {
            s[x].push_back(PII(y,val));
            s[y].push_back(PII(x,val));
        }
    }
    for(int i=0;i<s[1].size();i++)
    {
        low_cost[s[1][i].fi]=s[1][i].se;
    }
/*    for(int i=2;i<=n;i++)
    {
        low_cost[i]=min(low_cost[i],map[1][i]);
    }*/
    zou[1]=1;
    zhong=1;
    for(int qwer=1;qwer<n;qwer++)
    {
        int f=0;
        mi=1000000000;
        for(int i=1;i<=n;i++)
        {
            if(low_cost[i]<mi && zou[i]==0)
            {
                mi=low_cost[i];
                zhong=i;
                f=1;
            }
        }
        if(f==0)
        {
            printf("orz");
            return 0;
        }
        ans+=mi;
        zou[zhong]=1;
        for(int i=0;i<s[zhong].size();i++)
        {
            if(zou[s[zhong][i].fi]==1) continue;
            low_cost[s[zhong][i].fi]=min(low_cost[s[zhong][i].fi],s[zhong][i].se);
        }
        
/*        for(int i=1;i<=n;i++)
        {
            if(map[zhong][i]<low_cost[i])
                low_cost[i]=map[zhong][i];
        }*/
    }
    printf("%d",ans);
}

 

posted @ 2017-10-12 10:42  cc123321  阅读(192)  评论(0编辑  收藏  举报