Cod sursa(job #2328695)

Utilizator aditzu7Adrian Capraru aditzu7 Data 26 ianuarie 2019 09:58:29
Problema Arbore partial de cost minim Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
FILE*f=fopen("apm.in","r");
FILE*g=fopen("apm.out","w");
priority_queue<pair<int,pair<int,int> >,vector<pair<int,pair<int,int> > >, greater<pair<int,pair<int,int> > > > h;
vector <pair<int,int> > v[200001];
vector <pair<int,int> > sol;
int x,y,c,cost,n,m,t[200001],i;
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{

    fscanf(f,"%d%d%d",&x,&y,&c);
    v[x].push_back(make_pair(c,y));
    v[y].push_back(make_pair(c,x));
}
h.push(make_pair(0,make_pair(1,1)));
t[1]=0;
while(!h.empty()){
        int nod=h.top().second.second;
    if(t[nod]==0){
        t[h.top().second.second]=h.top().second.first;
        cost+=h.top().first;
        sol.push_back(make_pair(h.top().second.first,nod));
        h.pop();
        for(i=0;i<v[nod].size();i++){
            if(t[v[nod][i].second]==0){
                h.push(make_pair(v[nod][i].first,make_pair(nod,v[nod][i].second)));

            }
        }
    }
    else h.pop();



}
fprintf(g,"%d\n%d\n",cost,sol.size()-1);
for(i=1;i<sol.size();i++){
    fprintf(g,"%d %d\n",sol[i].first,sol[i].second);
}

    return 0;
}