Pagini recente » Cod sursa (job #541304) | Cod sursa (job #186433) | Cod sursa (job #609994) | Cod sursa (job #1278870) | Cod sursa (job #331026)
Cod sursa(job #331026)
#include<fstream>
#include<queue>
#include<cstring>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
const int maxn=30100;
const int INF=0x3f3f3f3f;
struct nod
{
int w;
int dis;
nod *next;
}*one,*a[maxn];
int i,j,dis[maxn],x,y,z,n,m,u,v,k;
bool been[maxn];
queue<int>Q;
int main()
{
f>>n>>m>>u>>v;
for(i=1;i<=m;++i)
{
f>>x>>y>>z;
one=new nod;
one->w=y;
one->dis=z;
one->next=a[x];
a[x]=one;
one=new nod;
one->w=x;
one->dis=-z;
one->next=a[y];
a[y]=one;
}
memset(been,false,sizeof(been));
memset(dis,INF,sizeof(dis));
if(u>v)
x=u,u=v,v=x;
dis[u]=0;
been[u]=true;
Q.push(u);
while(!Q.empty()&&dis[v]==INF)
{
k=Q.front();
Q.pop();
been[k]=false;
for(nod *it=a[k];it;it=it->next)
if(dis[k]+it->dis<dis[it->w])
{
dis[it->w]=dis[k]+it->dis;
if(been[it->w]==false)
Q.push(it->w),been[it->w]=true;
}
}
g<<dis[v]<<"\n";
f.close();
g.close();
return 0;
}