Cod sursa(job #2348103)

Utilizator TeoMiliMilitaru Teodora TeoMili Data 19 februarie 2019 13:08:48
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
struct lista{
    int x,c;
};
vector <lista> v[400001];
int q[400001],viz[400001],d[400001],tata[400001],n,m,i,x,y,cost,Min,a;
void coada(int x){
    int i,l,p,u;
    p=u=1;
    q[p]=x;
    while(p<=u){
        l=q[p];
        p++;
        if(viz[l]==0){
            viz[l]=1;
            for(i=0;i<v[l].size();i++)
                if(viz[v[l][i].x]==0 && v[l][i].c<d[v[l][i].x]){
                    d[v[l][i].x]=v[l][i].c;
                    tata[v[l][i].x]=l;
                    u++;
                    q[u]=v[l][i].x;
                }
        }
    }

}
int main()
{
    ifstream cin("apm.in");
    ofstream cout("apm.out");
    cin>>n>>m;
    for(i=1;i<=m;i++){
        cin>>x>>y>>cost;
        v[x].push_back({y,cost});
        v[y].push_back({x,cost});
    }
    for(i=2;i<=n;i++)
        d[i]=INT_MAX;
    d[1]=0;
    viz[1]=1;
    for(i=0;i<v[1].size();i++){
        d[i]=v[1][i].c;
        tata[i]=1;
    }
    coada(1);
    Min=INT_MAX;
    for(i=2;i<=n;i++)
        if(d[i]<Min){
            Min=d[i];
            a=i;
        }
    cout<<Min<<'\n'<<n-1<<'\n';
    return 0;
}