卡码网: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]);
}
}