Cod sursa(job #523250)

Utilizator sandu2508Grigoroi Alexandru sandu2508 Data 17 ianuarie 2011 16:14:34
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<iostream>
#include<stdio.h>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;

FILE *fin=fopen("war.in", "r");
FILE *fout=fopen("war.out", "w");

int n, p, k, x[1100], y[1100], z[1100], pi[1100]={0}, st[1100], gr[1100], ans, ind[1100];

int grupa(int i)
{
	if (gr[i] == i)
		return i;
	gr[i]=grupa(gr[i]);
	return gr[i];
};

void reuniune(int i,int j)
{
	gr[grupa(i)] = grupa(j); 
}

bool comp(int i, int j)
{
	return(z[i]<z[j]);	
}

int main()
{
	fscanf(fin, "%d %d\n", &n, &p, &k);
	for(int i=1;i<=p;i++)
	{
		scanf("%d %d %d\n", &x[i], &y[i], &z[i]);
		ind[i]=i;
	}

	for(int i=1;i<=n;i++)
		gr[i]=i;
	sort(ind+1,ind+p+1,comp);
	for(int i=1;i<=p;i++)
		if (grupa(x[ind[i]])!=grupa(y[ind[i]]))]
		{
			ans+=z[ind[i]];
			reuniune(x[ind[i]],y[ind[i]]);
		};
	fprintf(fout, "%d\n", ans);
	fclose(fin);
	fclose(fout);
	return 0;
};