Pagini recente » Cod sursa (job #2185750) | Cod sursa (job #2457133) | Cod sursa (job #828409) | Cod sursa (job #585900) | Cod sursa (job #655331)
Cod sursa(job #655331)
#include<fstream>
#include<iostream>
using namespace std;
long vizitat[100300],T[100300],drum[100300];
long k=0,n,m,d,x,y;
struct nod
{
int nd,distanta;
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->distanta=d;
p->next=L[j];
L[j]=p;
q=new nod;
q->nd=j;
q->distanta=d;
q->next=L[i];
L[i]=q;
}
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()
{
nod *q;
fstream g("sate.out",ios::out);
int i,lungime=0;
for(i=0; i<=k-2; i++)
if(drum[i]<drum[i+1])
{
q=L[drum[i]];
while(q)
{
if(q->nd==drum[i+1])
{
lungime+=q->distanta;
q=NULL;
}
if(q)
q=q->next;
}
}
else
{
q=L[drum[i]];
while(q)
{
if(q->nd==drum[i+1])
{
lungime-=q->distanta;
q=NULL;
}
if(q)
q=q->next;
}
}
g<<lungime;
g.close();
}
int main()
{
Citire();
DFS(x);
if(T[y]!=0)
Inversare(y);
Afisare();
return 0;
}