题解 | #最长路径#

星球游戏

http://www.nowcoder.com/practice/8d4612651f6e4ddf831bb816496bf237

从牛牛所占有的所有星球出发,向外扩张,当第一次触碰到牛妹的星球时,跳出循环。
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param serialP intvector 牛牛占领的p个星球的编号
     * @param serialQ intvector 牛妹占领的q个星球的编号
     * @param path intvector<vector<>> m条隧道,每条隧道有三个数分别是ui,vi,wi。ui,vi分别是隧道的两边星球的编号,wi是它们之间的距离
     * @param nn int 星球个数n
     * @return int
     */

    

    int Length(vector<int>& serialP, vector<int>& serialQ, vector<vector<int>>& path, int nn) {
        // write code here
        vector<int> visited(nn);
        unordered_set<int> p; //牛牛的地盘
        unordered_set<int> q; //牛妹的地盘
        vector<vector<pair<int, int>>> point_to(nn); //路径连接
        for (auto i : serialQ) q.emplace(i - 1);  //记录牛妹的地盘

        for (int index = 0; index < path.size();++index) {
            point_to[path[index][0] - 1].push_back({ path[index][1] - 1,path[index][2] });
            point_to[path[index][1] - 1].push_back({ path[index][0] - 1,path[index][2] });
        }

        auto mycomp2 = [](const pair<int, int>&a, const pair<int, int>&b)->bool {
            return a.second > b.second;
        };  //自定义路径比较算法

        priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(mycomp2)> que(mycomp2);  //优先队列,每次挤出距离最近的星球

        for (auto i : serialP) {
            que.push({ i-1,0 });
            p.emplace(i-1);
        }  //牛牛的地盘
        int ans = -1;
        int cur_index, next_index, cur_cost;
        while (!que.empty()) {
            auto cur = que.top();
            que.pop();
            cur_index = cur.first;
            cur_cost = cur.second;

            if (q.find(cur_index) != q.end()) {
                ans = cur_cost;
                break;
            }  //找到牛妹的地盘了,跳出循环
            if (visited[cur_index]) continue;
            visited[cur_index] = 1;
            for (auto next : point_to[cur_index]) {
                next_index = next.first;
                if (visited[next_index] || p.find(next_index) != p.end()) continue; //如果下一个点已经计算出最短路径了或者属于牛牛的地盘则跳过
                que.push({ next_index,cur_cost + next.second });
            }
        }
        return ans;
    }
};

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
LastWh1spe...:ssob真有些人和那个没睡醒一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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