Quick actions

cmd+k|ctrl+k

Navigation

Languages

Prim

Snippet info

Language

Cpp

Visibility

public

Author

xue-h21

Created

2022-05-01T06:17:08.42527Z

Updated

2022-05-01T06:17:20.464169Z

#include<bits/stdc++.h>
using namespace std;
int V,E,m,ans=0;
int v[101],e[1000],w[1000],d[100],father[100]={0};
bool T[100]={0};
void Prim(int u){
    if(m==V) return;
    for(int i=v[u];i<v[u+1];++i){
        if(d[e[i]]>w[i]){
            d[e[i]]=w[i];
            father[e[i]]=u;
        }
    }
    int d_min=0x7fffffff,v_min=102;
    for(int i=0;i<V;++i){
        if(!T[i]&&d[i]<d_min){
            d_min=d[i];
            v_min=i;
        }
    }
    ans+=d_min;
    cout<<"["<<father[v_min]<<"->"<<v_min<<"]";
    T[v_min]=1;
    ++m;
    Prim(v_min);
}

int main (){
    cin>>V>>E;
    for(int i=0;i<=V;++i){
        cin>>v[i];
        d[i]=0x7fffffff;
    }
    for(int i=0;i<E;++i) cin>>e[i];
    for(int i=0;i<E;++i) cin>>w[i];
    
    T[0]=1;
    m=1;
    Prim(0);
    cout<<" "<<ans<<endl;
    return 0;
}
INFO