Cod sursa(job #655320)

Utilizator noobakafloFlorin eu noobakaflo Data 2 ianuarie 2012 11:38:28
Problema Sate Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
using namespace std;
long vizitat[100300],T[100300],drum[100300],distante[100000000];
long k=0,n,m,d,x,y;


struct nod
{
	int nd;
	nod *next;
};

nod *L[100300];

void Citire()
{
    nod *p,*q; 
	int i,j;
	fstream f("sate.in",ios::in);
	f>>n>>m>>x>>y;
	while(f>>i>>j>>d)
	{
		p=new nod;
		p->nd=i;
		p->next=L[j];
		L[j]=p;
		
		q=new nod;
		q->nd=j;
		q->next=L[i];
		L[i]=q;
		
		distante[(i*j)+1]=d;
	}
	f.close();
}

void Inversare(int nod)
{
	if(nod!=0)
	{
		Inversare(T[nod]);
		drum[k++]=nod;
	}
}

void DFS(int varf)
{
	nod *q;
	vizitat[varf]=1;
	q=L[varf];
	while(q)
	{
		if(vizitat[q->nd]==0)
		{
		   T[q->nd]=varf;
		   DFS(q->nd);
		}
		q=q->next;
	}
}
	
void Afisare()
{
	
	fstream g("sate.out",ios::out);
	int i,lungime=0;
	for(i=0; i<=k-2; i++)
		if(drum[i]<drum[i+1])
			lungime+=distante[(drum[i]*drum[i+1])+1];
		else
			lungime-=distante[(drum[i]*drum[i+1])+1];
		
	g<<lungime;	
	g.close();
	
}


int main()
{
	Citire();
	DFS(x);
	if(T[y]!=0) 
		Inversare(y);
	
	Afisare();
	return 0;
}