Pagini recente » Cod sursa (job #2617300) | Cod sursa (job #81919) | Cod sursa (job #2086161) | Cod sursa (job #547271) | Cod sursa (job #2578844)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("oracol.in");
ofstream fout("oraco.out");
const int NMAX=500505;
int t[1001],rang[1001];
struct muchie
{
int x,y,c;
} v[NMAX];
int n,C,nrm,ri,rj,nr;
long long int costmin;
bool ok(muchie x,muchie y)
{
return x.c<y.c;
}
int radacina(int k)
{
// fout<<k<<" "<<t[k]<<endl;
if(t[k]==0)
return k;
else
{
nr=radacina(t[k]);
t[k]=nr;
return nr;
}
}
void kruskal()
{
int j=0;
for(int i=1; i<=n; i++)
{
do
{
j++;
//fout<<v[j].x<<" "<<v[j].y<<" "<<ri<<" "<<rj<<endl;
ri=radacina(v[j].x);
//fout<<endl;
rj=radacina(v[j].y);
//fout<<endl;
//fout<<v[j].x<<" "<<v[j].y<<" "<<ri<<" "<<rj<<endl;
}
while(v[j].x!=v[j].y && ri==rj);
costmin+=v[j].c;
if(v[j].x!=v[j].y)
{
if(rang[ri]>rang[rj])
t[rj]=ri;
else
{
t[ri]=rj;
if(rang[ri]==rang[rj])
rang[rj]++;
}
}
}
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
for(int j=i; j<=n; j++)
{
fin>>C;
nrm++;
v[nrm].c=C;
v[nrm].x=i;
v[nrm].y=j+1;
}
sort(v+1,v+nrm+1,ok);
kruskal();
fout<<costmin;
return 0;
}