#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#define INFINITY 100100
#define MAX 20005
using namespace std;
long int test,n,m,S,T,ucost,i,x,w,a,b,len;
vector<long int>G[MAX],cost[MAX];
long int dist[MAX];
struct data
{
long int server,latency;
};
struct cmp
{
bool operator()(data lhs,data rhs)
{
return lhs.latency<rhs.latency;
}
};
void dijkstra(long int source,long int destination)
{
for(i=0;i<=n;i++)
{
dist[i]= INFINITY;
}
priority_queue<data,vector<data>,cmp>Q;
data u,v;
u.server=source;
u.latency=0;
dist[source]=0;
Q.push(u);
while(!Q.empty())
{
u = Q.top();
Q.pop();
ucost = u.latency;
len = G[u.server].size();
for(i=0;i<len;i++)
{
v.server = G[u.server][i];
v.latency = cost[u.server][i]+ucost;
if(dist[v.server]>v.latency)
{
dist[v.server] = v.latency;
Q.push(v);
}
}
}
}
int main()
{
cin>>test;
for(x=1;x<=test;x++)
{
cin>>n>>m>>S>>T;
for(i=0;i<m;i++)
{
cin>>a>>b>>w;
G[a].push_back(b);
G[b].push_back(a);
cost[a].push_back(w);
cost[b].push_back(w);
}
dijkstra(S,T);
if(dist[T]!=INFINITY)
{
printf("Case #%ld: %ld\n",x,dist[T]);
}
else
{
printf("Case #%ld: unreachable\n",x);
}
for(i=0;i<n;i++)
{
G[i].clear();
cost[i].clear();
}
}
return 0;
}
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#define INFINITY 100100
#define MAX 20005
using namespace std;
long int test,n,m,S,T,ucost,i,x,w,a,b,len;
vector<long int>G[MAX],cost[MAX];
long int dist[MAX];
struct data
{
long int server,latency;
};
struct cmp
{
bool operator()(data lhs,data rhs)
{
return lhs.latency<rhs.latency;
}
};
void dijkstra(long int source,long int destination)
{
for(i=0;i<=n;i++)
{
dist[i]= INFINITY;
}
priority_queue<data,vector<data>,cmp>Q;
data u,v;
u.server=source;
u.latency=0;
dist[source]=0;
Q.push(u);
while(!Q.empty())
{
u = Q.top();
Q.pop();
ucost = u.latency;
len = G[u.server].size();
for(i=0;i<len;i++)
{
v.server = G[u.server][i];
v.latency = cost[u.server][i]+ucost;
if(dist[v.server]>v.latency)
{
dist[v.server] = v.latency;
Q.push(v);
}
}
}
}
int main()
{
cin>>test;
for(x=1;x<=test;x++)
{
cin>>n>>m>>S>>T;
for(i=0;i<m;i++)
{
cin>>a>>b>>w;
G[a].push_back(b);
G[b].push_back(a);
cost[a].push_back(w);
cost[b].push_back(w);
}
dijkstra(S,T);
if(dist[T]!=INFINITY)
{
printf("Case #%ld: %ld\n",x,dist[T]);
}
else
{
printf("Case #%ld: unreachable\n",x);
}
for(i=0;i<n;i++)
{
G[i].clear();
cost[i].clear();
}
}
return 0;
}
0 comments: (+add yours?)
Post a Comment