这道题很明显是一道最短路的题
但是很明显需要优化,
我用spfa加上读入优化,用链表进行储存,
然后就过了。。。。
#include
#define rep(i, x, y) for(int i = x; i <= y; i ++)
#define rrep(i, x, y) for(int i = y; i >= x; i --)
#define X first
#define Y second
#define pii pair
#define mp make_pair
#define pb push_back
using namespace std;
inline int read()
{
int x = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while(ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
struct Edge
{
int next, to, v;
}e[30010];
int dis[3010], ts, te, cnt, head[3010], vis[3010];
void ins(int u, int v, int w)
{
e[++ cnt].next = head[u];
e[cnt].to = v;
e[cnt].v = w;
head[u] = cnt;
}
void insert(int u, int v, int w)
{
ins(u, v, w);
ins(v, u, w);
}
void spfa()
{
queue
Q;
Q.push(ts);
memset(dis, 0x3f, sizeof(dis));
dis[ts] = 0;
while(!Q.empty())
{
int now = Q.front();
Q.pop();
vis[now] = 0;
for(int i = head[now]; i; i = e[i].next)
{
int y = e[i].to;
if(dis[now] + e[i].v < dis[y])
{
dis[y] = dis[now] + e[i].v;
if(!vis[y])
{
vis[y] = 1;
Q.push(y);
}
}
}
}
}
int main()
{
int n = read();
int k = read();
ts = read();
te = read();
rep(i, 1, k)
{
int u = read();
int v = read();
int w = read();
insert(u, v, w);
}
spfa();
cout << dis[te];
return 0;
}