Pagini recente » Cod sursa (job #1073069) | Cod sursa (job #1624692) | Cod sursa (job #1140734) | Cod sursa (job #1613) | Cod sursa (job #1504960)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
int m,n,x,y,poz;
#define DIM 100000
char buff[DIM];
void citeste(int &numar)
{
numar = 0;
char semn='+';
while (buff[poz] < '0' || buff[poz] > '9')
{
semn = buff[poz];
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
if (semn == '-')
numar = -numar;
}
struct edge
{
int dest;
int cost;
};
vector<edge> adj[30005];
int dist[30005];
queue<int> q;
int main()
{
int a,b,cost,front,i,d;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&x,&y);
for(i=0; i<m; i++)
{
citeste(a);
citeste(b);
citeste(cost);
scanf("%d %d %d",&a,&b,&cost);
edge ab,ba;
ab.dest=b;
ab.cost=cost;
ba.dest=a;
ba.cost=-cost;
adj[a].push_back(ab);
adj[b].push_back(ba);
}
q.push(x);
while(!q.empty())
{
front=q.front();
q.pop();
for(i=0; i<adj[front].size(); ++i)
{
int d=adj[front][i].dest;
if(dist[d]==0)
{
q.push(d);
dist[d]=dist[front]+adj[front][i].cost;
if(d==y)
{
printf("%d",dist[y]);
return 0;
}
}
}
}
}