Pagini recente » Cod sursa (job #2867559) | Cod sursa (job #550677) | Cod sursa (job #1484610) | Istoria paginii utilizator/andrei25.jpg | Cod sursa (job #700553)
Cod sursa(job #700553)
#include <fstream>
//#include <iostream.h>
//#include <conio.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int x,y,n,m,i,c,minn,nb=0,nb2=0;
struct tlink {int nod,cost; tlink * next;};
struct tlist {tlink *first,*last;};
void addlast(tlist &list,int nod,int val=0)
{
tlink *l=new tlink;
l->nod=nod;
l->cost=val;
if(list.first==NULL) {list.first=l;list.last=l;}
list.last->next=l;
list.last=l;
l->next=NULL;
}
struct tnod {int chk,val; tlist list;} a[200001];
void link(int x, int y,int val=0)
{
addlast(a[x].list,y,val);
addlast(a[y].list,x,val);
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{
a[i].chk=0;
a[i].val=0;
a[i].list.first=NULL;
}
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
link(x,y,c);
}
int k=1;
int miny=k,minx;
tlist noduri;
tlist muchii;
noduri.first=NULL;
muchii.first=NULL;
a[k].chk=1;
addlast(noduri,k);
while(miny!=0)
{
tlink *t1=noduri.first;
minn=1001;
miny=0;
while(t1!=NULL)
{
tlink *t2=a[t1->nod].list.first;
while(t2!=NULL)
{
if(a[t2->nod].chk==0 && t2->cost<minn)
{
minx=t1->nod;
miny=t2->nod;
minn=t2->cost;
}
t2=t2->next;
}
t1=t1->next;
}
if(miny!=0)
{
addlast(noduri,miny);
addlast(muchii,minx,miny);
a[miny].chk=1;
nb+=minn;
nb2++;
}
}
g<<nb<<endl<<nb2<<endl;
tlink *t1=muchii.first;
while(t1!=NULL)
{
g<<t1->nod<<" "<<t1->cost<<endl;
t1=t1->next;
}
g.close();
f.close();
return 0;
}