Pagini recente » Cod sursa (job #107103) | Cod sursa (job #1410041) | Cod sursa (job #642317) | Cod sursa (job #592322) | Cod sursa (job #560223)
Cod sursa(job #560223)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
struct el
{
int a,b;
long ert;
} elvek[307];
struct node
{
int csucs;
node *kov;
};
struct elem
{
int halmaz;
node *lista;
} v[19];
long n,m,a,b,c;
bool comp(el p,el q)
{
return p.ert<q.ert;
};
int tovabb()
{
int i=1;
while(i<=n-1)
{
if(v[i-1].halmaz!=v[i-1].halmaz)
return 0;
i++;
}
return -1;
}
int atrak(int a,int b)
{
v[b].halmaz=v[a].halmaz;
node *p=v[b].lista;
while(p!=NULL)
{
v[p->csucs].halmaz=v[a].halmaz;
node *q=p;
q->kov=v[a].lista;
v[a].lista=q;
p=p->kov;
}
p=v[b].lista;
while(p!=NULL)
{
v[p->csucs].lista=v[a].lista;
p=p->kov;
}
return 0;
}
int main()
{
fin>>n>>m;
for(int i=0;i<=n-1;i++)
{
v[i].halmaz=i;
v[i].lista=NULL;
}
for(int i=1;i<=m;i++)
{
fin>>elvek[i].a>>elvek[i].b>>elvek[i].ert;
}
sort(elvek+1,elvek+m+1,comp);
/* for(int i=1;i<=m;i++)
{
cout<<elvek[i].a<<" "<<elvek[i].b<<" "<<elvek[i].ert<<"\n";
}*/
int t=tovabb(),i=1,sum=0;
while (t==1&&i<=m)
{
if(v[elvek[i].a].halmaz!=v[elvek[i].b].halmaz)
{
atrak(a,b);
sum=sum+elvek[i].ert;
}
t=tovabb();
i++;
}
if (t!=1)
fout<<sum;
else
fout<<"Nu exista solutie";
return 0;
}