Pagini recente » Cod sursa (job #1949762) | Cod sursa (job #2555562) | Cod sursa (job #1478713) | Cod sursa (job #2758578) | Cod sursa (job #1303950)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<bitset>
#include<queue>
#include<list>
using namespace std;
struct s
{
int d;
int l;
};
list<s> l[30002];
bitset<30002> v;
int calc(int x,int y)
{
queue<s> q;
q.push({x,0});
s z;
list<s>::iterator i;
s a;
while(q.size()>0)
{
z=q.front();
q.pop();
for(i=l[z.d].begin();i!=l[z.d].end();++i)
{
a=*i;
if(a.d==y)
{
return z.l+a.l;
}
q.push({a.d,z.l+a.l});
}
}
}
int main()
{
ifstream si;
si.open("sate.in");
FILE* so=fopen("sate.out","w");
int n,m,x,y;
si>>n>>m>>x>>y;
--x;
--y;
int i,a,b,c,ras;
bool d=false;
for(i=0;i<m;++i)
{
si>>a>>b>>c;
--a;
--b;
if((a==x&&b==y)||(a==y&&b==x))
{
d=true;
ras=c;
}
l[a].push_back({b,c});
l[b].push_back({a,-c});
}
list<s>::iterator j;
s z;
if(d==true)
{
fprintf(so,"%i\n",ras);
}
else
{
fprintf(so,"%i\n",calc(x,y));
}
}