Pagini recente » Cod sursa (job #1755601) | Cod sursa (job #1031296) | Cod sursa (job #2158807) | Cod sursa (job #2858967) | Cod sursa (job #1316935)
#include <stdio.h>
#include <vector>
std::vector<int> *adj,*cost;
int n,m,x,y;
bool ver[30001];
bool as=0;
void dfs(int sat,int counter)
{
int a,b;
ver[sat]=1;
if(sat==y)
{
printf("%d\n",counter);
as=1;
return;
}
std::vector<int>::iterator it1,it2;
for(it2=cost[sat].begin(),it1=adj[sat].begin();it1!=adj[sat].end();++it1,++it2)
{
a=*it1;
if(ver[a]==0)
{
b=*it2;
dfs(a,counter+b);
if(as==1) return;
}
}
ver[sat]=0;
}
int main()
{
freopen ("sate.in","r",stdin);
freopen ("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
int p1,p2,c;
int temp;
adj=new std::vector<int> [n+1];
cost=new std::vector<int> [n+1];
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&p1,&p2,&c);
if(p1>p2)
{
temp=p1;
p1=p2;
p2=temp;
}
adj[p1].push_back(p2);
adj[p2].push_back(p1);
cost[p1].push_back(c);
c*=(-1);
cost[p2].push_back(c);
}
dfs(x,0);
}