文章

35

粉丝

0

获赞

185

访问

6.0k

头像
好坑的电子地图 在评论区floyd同学上改进 题解:
P1666 中南大学机试题
发布于2026年3月23日 20:12
阅读数 31

#include<bits/stdc++.h>
using namespace std;
const int n = 1e3 + 9;
int dis[n][n];
int extime(int x)
{
    if(x % 2 == 0) return 2;
    else return 1;
}
int main()
{
    ios::sync_with_stdio(0); cin.tie(0);
    int N, M, S, T, A;
    while(cin >> N >> M >> S >> T >> A)
    {
        memset(dis, 0x3f, sizeof(dis));
        for(int i = 1; i <= N; i++) dis[i][i] = 0;  // 自己到自己距离为0,这里绝对不能错

        for(int i = 1; i <= M; i++)
        {
            int u, v, t; cin >> u >> v >> t;
            dis[u][v] = min(dis[u][v], t + extime(u)); //在建图的时候直接把权值加入即可
            dis[v][u] = min(dis[v][u], t + extime(v)); //无向图,记得两个方向都要
        }

        for(int k = 1; k <= N; k++)
            for(int i = 1; i <= N; i++)
                for(int j = 1; j <= N; j++)
                    dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);

        if(dis[S][T] <= A) cout << "YES " << dis[S][T]...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发