Cod sursa(job #293655)

Utilizator mirela_pMirela Popoveniuc mirela_p Data 1 aprilie 2009 23:09:27
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<iostream>
#include<fstream>
#define INF 1001
#define NNN 200000
using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");

long n,m;
int a[NNN][NNN0];
int v[NNN],viz[NNN];
struct nod {int x,y;}ff[NNN];

int main(void){
f>>n>>m;
long x,y,c;
long cost=0;
int i,j;
for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=INF;
for(i=1;i<=m;i++) 
	{
		f>>x>>y>>c;
		a[x][y]=c;
		a[y][x]=c;
	}

int k=0;
v[1]=1;
viz[1]=1;
int vv=1;
while(vv<n)
{
	int mintotal=INF,poz,pozz,pozzz;
	for(i=1;i<=vv;i++)
		{
			int min=INF;
			for(j=1;j<=n;j++) if(a[v[i]][j]<min && viz[j]==0) {min=a[v[i]][j];poz=j;}
			if(min<mintotal) {mintotal=min;pozz=poz;pozzz=v[i];}
		}
	v[++vv]=pozz;
	viz[pozz]=1;
	cost+=mintotal;
	ff[vv-1].x=pozz;
	ff[vv-1].y=pozzz;
	a[pozz][pozzz]=a[pozzz][pozz]=INF;
}

g<<cost<<"\n"<<vv-1<<"\n";
for(i=1;i<=vv-1;i++) g<<ff[i].x<<" "<<ff[i].y<<"\n";
f.close();
g.close();
return 0;
}