Cod sursa(job #1975976)

Utilizator vic2002Melinceanu Victor vic2002 Data 2 mai 2017 16:21:56
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<bits/stdc++.h>
#define rc(x) return cout<<x<<endl,0
#define nmax 200001
const int inf=INT_MAX;
const int mod=1e9+7;
typedef long long ll;
using namespace std;
long n,m,c,x,y,i,j,nr=1,tot,viz[nmax],key[nmax],par[nmax],mi,in;
vector<pair<long,long> >a[nmax];
int main()
{
	ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
	freopen("amp.in","r",stdin);
	freopen("apm.out","w",stdout);
    cin>>n>>m;
    for(i=1;i<=max(n,m);i++)
	{
		if(i<=m)
		{
		  cin>>x>>y>>c;
		  a[x].push_back({y,c});
		  a[y].push_back({x,c});
		}
		if(i<=n)key[i]=inf/2;
	}
	key[1]=0,par[1]=-1;
	for(i=1;i<=n;i++)
	{
		mi=inf/2;
		for(j=1;j<=n;j++)if(!viz[j] && key[j]<mi)mi=key[j],in=j;
		tot+=mi;
		viz[in]=1;
		for(j=0;j<a[in].size();j++)
		 if(!viz[a[in][j].first] && a[in][j].second<key[a[in][j].first])
		  par[a[in][j].first]=in,key[a[in][j].first]=a[in][j].second;
	}
	cout<<tot<<endl<<n-1<<endl;
	for(i=2;i<=n;i++)cout<<par[i]<<" "<<i<<endl;
	return 0;
}