Cod sursa(job #1563291)

Utilizator AdrianVrAdrian Stefan Vramulet AdrianVr Data 5 ianuarie 2016 20:52:18
Problema Arbore partial de cost minim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <algorithm>
#define Nmax 200001
#define Mmax 400001
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m,x,y,c,arb[Nmax],componente[Nmax],nr=1,s;
struct muchie{int x,y,c;}G[Mmax];
bool comp(muchie x,muchie y)
{if(x.c<y.c)
  return true;
 return false;
}
int conex(int x,int y)
{if(componente[x]==componente[y])
   return 0;
int aux=componente[y];//se suprascrie y si apoi compara cu o valoare schimbata, gresit
 for(int i=1;i<=n;i++)
 {
     if(componente[i]==aux)
        componente[i]=componente[x];
 }
 return 1;
}
int main()
{int i;
    f>>n>>m;
for(i=1;i<=n;i++)
  componente[i]=i;
for(i=1;i<=m;i++)
 f>>G[i].x>>G[i].y>>G[i].c;
sort(G+1,G+m+1,comp);
arb[1]=1;
for(i=2;i<=m;i++)
 { if(conex(G[i].x,G[i].y))
   arb[++nr]=i;
    if(nr==n-1)
     break;
 }
for(i=1;i<=nr;i++)
 s+=G[arb[i]].c;
g<<s<<'\n'<<n-1<<'\n';
for(i=1;i<=nr;i++)
  g<<G[arb[i]].x<<' '<<G[arb[i]].y<<'\n';
    return 0;
 }