代码随想录第59天

卡码网:47. 参加科学大会

python 复制代码
#include <iostream>
#include <unordered_set>
#include <queue>
#include <vector> 
#include <climits>

using namespace std;

struct cmp{
    bool operator ()(vector<int> a, vector<int> b) {
        return a[2] > b[2];
    } 
};

int main(){
    int n, m;
    cin>> n>> m;
    vector<vector<vector<int>>> graph(n+1);
    for(int i=0; i<m; i++){
        int start, end, len;
        cin>>start>>end>>len;
        graph[start].push_back({start, end,  len});
    }
    
    unordered_set<int> set;
    priority_queue<vector<int>, vector<vector<int>>, cmp> que;
    
    vector<int> length(n+1, INT_MAX);
    set.insert(1);
    for(int i=0; i<graph[1].size(); i++){
        if( set.find(graph[1][i][1]) == set.end() ){
            que.push(graph[1][i]);
            length[graph[1][i][1]] = graph[1][i][2];
        }
    }
    
    length[1] = 0;
    while( !que.empty() ){
        auto bian = que.top();
        if( set.find(bian[1]) != set.end() ){
            que.pop();
        } else {
            length[ bian[1] ] = min(length[bian[1]], length[bian[0]] + bian[2]);
            que.pop();
            set.insert(bian[1]);
            for(int i=0; i<graph[bian[1]].size(); i++){
                if( set.find(graph[bian[1]][i][1]) == set.end() ){
                    que.push(graph[bian[1]][i]);
                }
            }
        }
    }
    
    if( length[n] == INT_MAX) cout<<-1;
    else  cout<<length[n];
    
    return 0;
}

卡码网:94. 城市间货物运输 I

python 复制代码
import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int bian= sc.nextInt();
        int [][]map=new int[n+1][n+1];
        for (int i = 0; i <= n; i++) {
            Arrays.fill(map[i],Integer.MAX_VALUE);
        }

        for (int i = 0; i < bian; i++) {
            int s1=sc.nextInt(),s2=sc.nextInt(),s3=sc.nextInt();
            map[s1][s2]=s3;
        }
        int[] res = new int[n + 1];
        Arrays.fill(res,Integer.MAX_VALUE);
        res[1]=0;
        for(int k=0;k<n;k++){
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if(map[i][j]!=Integer.MAX_VALUE&&res[i]!=Integer.MAX_VALUE){
                    if(res[i]+map[i][j]<res[j]){
                        res[j]=res[i]+map[i][j];
                    }
                }
            }
        }}
        System.out.println(res[n]==Integer.MAX_VALUE?"unconnected":res[n]);
    }
}
相关推荐
故事和你918 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__8 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__9 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒10 小时前
LeetCode:2两数相加
算法·leetcode·职场和发展
py有趣10 小时前
力扣热门100题之零钱兑换
算法·leetcode
董董灿是个攻城狮10 小时前
Opus 4.7 来了,我并不建议你升级
算法
无敌昊哥战神10 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__11 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode