#include <bits/stdc++.h>
using namespace std;
int n,m;
long long shortest(vector<array<int,2>>(&g)[]){
priority_queue<array<long long,2>,vector<array<long long,2>>,greater<array<long long,2>>>pq;
pq.push({0,0});
long long dist[n];
fill(dist,dist+n,-1);
while(!pq.empty()){
array<long long,2> a = pq.top();
pq.pop();
if(dist[a[1]]==-1){
dist[a[1]]=a[0];
}
else{
continue;
}
for(array<int,2>e:g[a[1]]){
pq.push({a[0]+e[1],e[0]});
}
}
return dist[n-1];
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
vector<array<int,2>>g[n];
array<int,3>edges[m];
for(int i = 0;i<m;i++){
cin >> edges[i][0];
cin >> edges[i][1];
cin >> edges[i][2];
edges[i][0]--;
edges[i][1]--;
g[edges[i][0]].push_back({edges[i][1],edges[i][2]});
g[edges[i][1]].push_back({edges[i][0],edges[i][2]});
}
int pref[m];
pref[m-1]=edges[m-1][2];
for(int i = m-2;i>=0;i--){
pref[i]=max(edges[i][2],pref[i+1]);
}
long long ans = shortest(g);
for(int i = 0;i<m-1;i++){
int j = -1;
for(array<int,2>e1:g[edges[i][0]]){
j++;
if(e1[0]!=edges[i][1])
continue;
int temp = edges[i][2];
g[edges[i][0]][j][1]+=pref[i+1];
for(int k = 0;k<g[edges[i][1]].size();k++){
if(g[edges[i][1]][k][0]!=edges[i][0])
continue;
g[edges[i][1]][k][1]+=pref[i+1];
ans=max(ans,shortest(g));
g[edges[i][1]][k][1]=temp;
}
g[edges[i][0]][j][1]=temp;
}
}
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |