题解 | #I Wanna Go Home#

I Wanna Go Home

https://www.nowcoder.com/practice/0160bab3ce5d4ae0bb99dc605601e971

#include<iostream>
#include<algorithm>

const int MAX = 1024;
const int INF = 1e9;

class Solution
{
    public:
    int n;
    int G[MAX][MAX];
    int position[MAX];
    bool visit[MAX];
    int d[MAX];

    Solution(int n1)
        : n(n1)
    {
        std::fill(visit, visit+MAX, false);
        std::fill(position, position+MAX, -1);
        std::fill(d, d+MAX, INF);
        d[1] = 0;
        //注意对二维数组的初始化
        std::fill(G[0], G[0]+MAX*MAX, INF);
    }

    void Dijkstra()
    {
        for(int i=0;i<n;i++)
        {
            int u = -1, min = INF;
            for(int j=1;j<=n;j++)
            {
                if(!visit[j] && d[j] < min)
                {
                    u = j;
                    min = d[j];
                }
            }
            if(u == -1) return;
            visit[u] = true;
            for(int j=1;j<=n;j++)
            {
                //加一个限制条件,只准从1到2,不准从2到1
                if(!(position[u]==2 && position[j]==1))
                {
                    if(!visit[j] && G[u][j]!=INF && d[u]+G[u][j] < d[j])
                    {
                        d[j] = d[u]+G[u][j];
                    }
                }
            }
        }
    }
};

int main()
{
    int n, m;
    while (std::cin >> n)
    {
        if(n==0) break;
        std::cin >> m;
        Solution* s = new Solution(n);;
        for(int i=0;i<m;i++)
        {
            int A, B, T;
            std::cin >> A >> B >> T;
            if(s->G[A][B] > T)
            {
                s->G[A][B] = T;
                s->G[B][A] = T;
            }
        }
        for(int i=1;i<=n;i++)
        {
            std::cin >> s->position[i];
        }
        s->Dijkstra();

        if(s->d[2]!=INF)
            std::cout << s->d[2] << std::endl;
        else
            std::cout << -1 << std::endl;
        
        delete s;
    }
    
}



全部评论

相关推荐

搜索部&nbsp;首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务