Cod sursa(job #1941276)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 27 martie 2017 09:29:30
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define INF 9999999
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int d[200001],tata[200001],viz[200001],i,n,m,x,y,c,s,nod,nr,ult,a,b;
vector <pair <int , int > > G[200001];
struct compare{
  bool operator()(pair<int,int> x, pair<int, int> y){
     return x.second>y.second;
  }

};
priority_queue<pair <int, int>, vector<pair <int, int> >, compare> heap;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        G[a].push_back(make_pair(b,c));
        G[b].push_back(make_pair(a,c));
    }
   // memset(d,INF,sizeof(d));
    d[1]=0;
    tata[1]=0;
    viz[1]=1;
    nr=1;

    for(i=0;i<G[1].size();i++)
    {
        d[G[1][i].first]=G[1][i].second;
        tata[G[1][i].first]=1;
        viz[G[1][i].first]=1;
        heap.push(G[1][i]);
        nr++;
        ult=G[1][i].first;
    }
    while(nr!=n-1){
        nod=heap.top().first;
        if(viz[nod]==1)
        {
            heap.pop();
            continue;
        }
        else{
                nr++;
                viz[nod]=1;
            for(i=0;i<G[nod].size();i++){
                if(d[G[nod][i].first]<G[nod][i].second){
                    d[G[nod][i].first]=G[nod][i].second;
                    tata[G[nod][i].first]=nod;
                    heap.push(G[nod][i]);
                }
            }
        }
    }
for(i=1;i<=n;i++)
    s+=d[i];
g<<s<<'\n';
g<<n-1<<'\n';


    return 0;
}