Pagini recente » Cod sursa (job #2977384) | Cod sursa (job #1118742) | Cod sursa (job #1603426) | Cod sursa (job #1592810) | Cod sursa (job #925551)
Cod sursa(job #925551)
#include <fstream>
#include <deque>
#include <bitset>
using namespace std;
struct element
{
long long int lungime;
long long int indice;
element *next;
};
struct nod
{
element *cap;
element *coada;
}v[30001];
void add(long long int a,long long int b,long long int lung)
{
if(v[a].cap==NULL)
{
//cout<<"s-a creat capul pe "<<a<<endl;
v[a].cap=new element;
v[a].coada=new element;
v[a].coada=v[a].cap;
(v[a].cap)->lungime=lung;
(v[a].cap)->indice=b;
(v[a].cap)->next=NULL;
}
else
{
//cout<<"in v["<<a<<"] s-a adaigat "<<b<<endl;
element *aux=new element;
aux->indice=b;
aux->lungime=lung;
aux->next=NULL;
(v[a].coada)->next=aux;
v[a].coada=aux;
}
if(v[b].cap==NULL)
{
//cout<<"s-a creat capul pe "<<b<<endl;
v[b].cap=new element;
v[b].coada=new element;
v[b].coada=v[b].cap;
(v[b].cap)->lungime=-lung;
(v[b].cap)->indice=a;
(v[b].cap)->next=NULL;
}
else
{
//cout<<"in v["<<b<<"] s-a adaigat "<<a<<endl;
element *aux=new element;
aux->indice=a;
aux->lungime=-lung;
aux->next=NULL;
(v[b].coada)->next=aux;
v[b].coada=aux;
}
}
#define TYPE pair<int,long long int>
deque<TYPE> x;
bitset<30001> frec;
int bfs(int plecare,int cautat)
{
x.push_back(make_pair(plecare,0));
element *i;
while(x.size()!=0)
{
// cout<<x.front().first<<' '<<x.front().second<<endl;
if(x.front().first==cautat)
{
return x.front().second;
}
for(i=v[x.front().first].cap;i!=NULL;i=i->next)
{
if(!frec[i->indice])
{
x.push_back(make_pair(i->indice,x.front().second+i->lungime));
frec[i->indice]=1;
}
}
x.pop_front();
}
}
int main()
{
ifstream fin("sate.in");
ofstream fout("sate.out");
int n,m;
fin>>n>>m;
int x,y,care_x,care_y,i;
long long int lung;
fin>>care_x>>care_y;
for(i=0;i<m;i++)
{
fin>>x>>y>>lung;
add(x,y,lung);
}
/*
element *p;
for(p=v[1].cap;p!=NULL;p=p->next)
{
cout<<p->indice<<endl;
}*/
fout<<bfs(care_x,care_y)<<'\n';
fin.close();
fout.close();
return 0;
}