Pagini recente » Cod sursa (job #2133449) | Cod sursa (job #1695604) | Cod sursa (job #647791) | Cod sursa (job #648451) | Cod sursa (job #2390854)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <tuple>
using namespace std;
vector <int> graph[200005];
priority_queue <tuple<int,int,int> > myheap;
int cost_total;
int viz[200005];
vector <pair<int,int> > muchii_bune;
int nr_muchii_bune;
void kruskal(int N, int M)
{
tuple <int,int,int> muchie;
int i,x,y,c;
for(i=1;i<=M;i++)
{
if(nr_muchii_bune==N-1)
break;
muchie=myheap.top();
myheap.pop();
x=get<1>(muchie);
y=get<2>(muchie);
c=-get<0>(muchie);
if(viz[x]!=viz[y])
{
viz[x]=viz[y];
cost_total=cost_total+c;
muchii_bune.push_back(make_pair(x,y));
nr_muchii_bune++;
}
}
}
int main()
{
ifstream f("apm.in");
ofstream g("apm.out");
int N,M,x,y,c,i;
f>>N>>M;
for(i=1;i<=M;i++)
{
f>>x>>y>>c;
graph[x].push_back(y);
graph[y].push_back(x);
myheap.push(make_tuple(-c,x,y));
}
for(i=1;i<=N;i++)
viz[i]=i;
kruskal(N,M);
g<<cost_total<<endl;
g<<N-1<<endl;
for(i=0;i<N-1;i++)
g<<muchii_bune[i].second<<" "<<muchii_bune[i].first<<endl;
return 0;
}