Mai intai trebuie sa te autentifici.
Cod sursa(job #2431816)
Utilizator | Data | 20 iunie 2019 20:19:25 | |
---|---|---|---|
Problema | Sate | Scor | 80 |
Compilator | cpp-64 | Status | done |
Runda | Teme Pregatire ACM Unibuc 2013 | Marime | 1.35 kb |
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
//First destinatie second distanta
vector<pair<unsigned short,int>> graf[30010];
void addMuchie(unsigned short start,unsigned short ender,int d)
{
graf[start].push_back({ender,d});
graf[ender].push_back({start,d});
}
int n,m,x,y;
int distanta[30010];
int calculateDistance(int start,int ender)
{
if(start<graf[start][ender].first)
{
return distanta[start]+graf[start][ender].second;
}
return distanta[start]-graf[start][ender].second;
}
int bfs()
{
queue<unsigned short> cue;
cue.push(x);
while(cue.size())
{
int frontC = cue.front();
for(int i = 0;i<graf[frontC].size();i++)
{
int vdistanta = calculateDistance(frontC,i);
if(distanta[graf[frontC][i].first]==0)
{
distanta[graf[frontC][i].first]=vdistanta;
cue.push(graf[frontC][i].first);
if(distanta[y]!=0)
return distanta[y];
}
}
cue.pop();
}
return distanta[y];
}
int main()
{
int temp1,temp2,temp3;
fin>>n>>m>>x>>y;
for(int i = 1;i<=m;i++)
fin>>temp1>>temp2>>temp3,addMuchie(temp1,temp2,temp3);
fout<<bfs();
return 0;
}