Pagini recente » Diferente pentru preoni-2007/runda-2/solutii intre reviziile 26 si 27 | Cod sursa (job #1981331) | Cod sursa (job #278625) | Cod sursa (job #2014332) | Cod sursa (job #1564868)
#include<bits/stdc++.h>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
typedef struct Nod
{
int info;
int drum;
Nod *next;
} *Lista;
int x, y, m, n, r=0, a, b, s;
Lista L[30003];
bool viz[30003];
void add(int x, Lista &y, int s)
{
Lista p=new Nod;
p->drum=s;
p->info=x;
p->next=y;
y=p;
}
int dfs(int x, int D)
{
viz[x]=1;
for (Lista p=L[x]; p; p=p->next)
if (viz[p->info]==0){
if (p->info==b && x<b) return D + p->drum;
if (p->info==b && x>b) return D - p->drum;
if (x<p->info) return dfs(p->info, D + p->drum);
if (x>p->info) return dfs(p->info, D - p->drum);
}
viz[x]=0;
}
int main(){
f>>n>>m>>a>>b;
for (int i=1; i<=m; ++i)
{
f>>x>>y>>s;
add(x, L[y], s);
add(y, L[x], s);
}
g<<dfs(a, r);
return 0;
}