Am incercat sa fac problema
Desen insa iau 0 puncte si nu inteleg ce e gresit la rationament :
1. ca sa adaug un nod la arborele deja format caut muchia de cost minim.
2. dupa ce am legat nodul,caut alte puncte al caror cost ar putea fi micsorat.
#include <fstream>
#include <iomanip>
#include <cmath>
#define nmax 1002
using namespace std;
ifstream in("desen.in");
ofstream out("desen.out");
double X[nmax],Y[nmax];
int N,i,j;
double D[nmax];//muchia minima cu care am legat un nod de arbore
double C[nmax][nmax];//costul intre oricare 2 noduri
int main()
{
in>>N;
double S = 0,s;
for(i=1;i<=N;i++)in>>X[i]>>Y[i];
for(i=1;i<N;i++)for(j=i+1;j<=N;j++)C[i][j]=C[j][i] = sqrt((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]));//calculez distanta intre oricare 2 puncte
out<<setprecision(6);out<<fixed;
out<<S<<'\n';
for(i=2;i<=N;i++)
{
D[i] = 9999999;
for(j=1;j<i;j++)
if(C[i][j]<D[i])D[i]=C[i][j];
S+=D[i];//actualizez costul
for(j=1;j<i;j++)
if(D[j]>C[i][j])S-=D[j],S+=D[i];//elimin muchia anterioara si o adaug pe cea noua
out<<S<<'\n';
}
return 0;
}