#include<bits/stdc++.h>
using namespace std;
#define NAME "ROBOT"
#define FOR(i, a, b) for(int i = a; i <= b; i++)
#define FOD(i, a, b) for(int i = a; i >= b; i--)
#define ll long long
#define ii pair<int, int>
#define fi first
#define se second
#define fastIO ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
#define BIT(x, i) ((x >> i) & 1)
#define ALL(x) x.begin(), x.end()
const int maxn = 2e5 + 11;
const int LOGN = 20;
const int INF = 1e9 + 7;
int d[maxn]; /// thời gian ít nhất để di chuyển từ cây 1 đến cây i
int h[maxn], n, m, x;
vector<ii> adj[maxn];
int trace[maxn];
vector<int> path;
signed main() {
if(fopen(NAME".INP", "r")) {
freopen(NAME".INP", "r", stdin);
freopen(NAME".OUT", "w", stdout);
}
fastIO;
cin >> n >> m >> x;
FOR(i, 1, n) {
cin >> h[i];
d[i] = INF;
}
FOR(i, 1, m) {
int u, v, w; cin >> u >> v >> w;
adj[u].push_back({w, v});
adj[v].push_back({w, u});
}
d[1] = 0;
priority_queue<ii, vector<ii>, greater<ii>> q;
q.push({0, 1});
trace[1] = -1;
while(q.size()){
auto top = q.top();q.pop();
int u = top.second;
int du = top.first;
if(du > d[u]) continue;
for(auto i : adj[u]){
int t = i.fi;
int v = i.se;
if(d[v] > du + t){
d[v] = du + t;
trace[v] = u;
q.push({d[v], v});
}
}
}
// cout << d[n];
int u = n;
ll res = 0;
while(trace[u] != -1) {
int pu = trace[u];
path.push_back(u);
u = pu;
}
path.push_back(1);
reverse(ALL(path));
for(int i = 1; i < path.size(); i++) {
int t = d[path[i]] - d[path[i - 1]];
// cout << t << '\n';
res += t;
if(x < t) {
res += abs(x - t);
x = t;
}
if(x > h[path[i - 1]]) {
res = -1;
break;
}
if(x - t > h[path[i]]) {
res += abs(x - t - h[path[i]]);
x = h[path[i]];
continue;
}
x -= t;
}
if(res != -1 && x != h[n]) {
res += abs(x - h[n]);
x = h[n];
}
cout << res;
return 0;
}
/*
5 5 0
50
100
25
30
10
1 2 10
2 5 50
2 4 20
4 3 1
5 4 20
2 1 0
1
1
1 2 100
*/
컴파일 시 표준 에러 (stderr) 메시지
2014_ho_t4.cpp: In function 'int main()':
2014_ho_t4.cpp:29:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
29 | freopen(NAME".INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
2014_ho_t4.cpp:30:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
30 | freopen(NAME".OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |