Pagini recente » Cod sursa (job #152987) | Cod sursa (job #269538) | Cod sursa (job #207137) | Cod sursa (job #1812975) | Cod sursa (job #1769184)
#include <iostream>
#include<fstream>
#include<vector>
#include<fstream>
#include<algorithm>
#include<cmath>
#define Nmax 20000002
typedef int coada[30001];
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int a,p,cst[30001],n,m,x,y,i,j,cost,q,k,l;
coada c;
bool ok;
vector<pair <int,int> >v[30001];
inline void BFS(int nod)
{
cst[nod]=0;
int siz=1,start=1;
c[start]=nod;
while(siz>=start)
{
int k=c[start];
for(int i=0;i<v[k].size();i++)
if(cst[v[k][i].first]>cst[k]+v[k][i].second)
{
cst[v[k][i].first]=cst[k]+v[k][i].second;
siz++;
c[siz]=v[k][i].first;
}
start++;
}
}
int main()
{
f>>n>>m>>x>>y;
for(q=1;q<=m;q++)
{
f>>i>>j>>cost;
v[i].push_back(make_pair(j,cost));
v[j].push_back(make_pair(i,cost));
for(k=0;k<v[i].size()-1;k++)
for(l=1;l<v[i].size();l++)
{
int p=v[i][k].first;bool ok=1;
for(a=0;a<v[p].size() && ok;a++)
if(v[p][a].first==v[i][l].first) ok=0;
if(ok)
{v[v[i][k].first].push_back(make_pair(v[i][l].first,abs( v[i][k].second-v[i][l].second )));
v[v[i][l].first].push_back(make_pair(v[i][k].first,abs( v[i][k].second-v[i][l].second )));}
}
p=v[j][k].first;ok=1;
for(a=0;a<v[p].size() && ok;a++)
if(v[p][a].first==v[j][l].first)
ok=0;
for(k=0;k<v[j].size()-1;k++)
for(l=1;l<v[j].size();l++)
{
p=v[j][k].first;ok=1;
for(a=0;a<v[p].size() && ok;a++)
if(v[p][a].first==v[j][l].first)
ok=0;
if(ok)
{v[v[j][k].first].push_back(make_pair(v[j][l].first,abs( v[j][k].second-v[j][l].second )));
v[v[j][l].first].push_back(make_pair(v[j][k].first,abs( v[j][k].second-v[j][l].second )));}
}
}
for(i=1;i<=n;i++)
cst[i]=Nmax;
BFS(x);
g<<cst[y];
return 0;
}