#include<bits/stdc++.h>
#include "dreaming.h"
#define ll long long
#define pll pair<ll,ll>
#define vl vector<ll>
#define fi first
#define se second
#define in insert
#define all(v) v.begin(),v.end()
const int sz = 100005;
const ll inf = 1000000000000000;
using namespace std;
vector<pair<ll,ll>> adj[sz];
ll dis[sz][2], center, v1, v2, mx, cnt = -1;
bool used[sz];
vector<vector<ll>> path;
void trav(ll node){
used[node] = 1;
path[cnt].push_back(node);
for(pll edge: adj[node]){
if(!used[edge.fi]){
trav(edge.fi);
}
}
}
void dfs(ll node, ll we, ll p){
if(we > mx){
v2 = node;
mx = we;
}
for(pll edge: adj[node]){
if(edge.fi != p){
dfs(edge.fi, we + edge.se, node);
}
}
}
void caldis(ll node, ll we, ll p, ll type){
dis[node][type] = we;
for(pll edge: adj[node]){
if(edge.fi != p){
caldis(edge.fi, we + edge.se, node, type);
}
}
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
ll n = N, m = M, i, j;
for(i=1;i<=m;i++){
adj[A[i]].push_back({B[i], T[i]});
adj[B[i]].push_back({A[i], T[i]});
}
for(i=0;i<n;i++){
if(!used[i]){
cnt++;
path.push_back(vl(0));
trav(i);
}
}
multiset<ll> ms;
ll res = -inf;
for(i=0;i<=cnt;i++){
mx = -inf, v1 = -1, v2 = -1;
dfs(path[i][0], 0, -1);
v1 = v2;
mx = -inf;
dfs(v1, 0, -1);
caldis(v1, 0, -1, 0);caldis(v2, 0, -1, 1);
ll pc = path[i][0], pb = max(dis[pc][0], dis[pc][1]);
for(ll x: path[i]){
if (max(dis[x][0], dis[x][1]) < max(dis[pc][0], dis[pc][1])) pc = x;
}
ms.in( max(dis[pc][0], dis[pc][1]) );
res = max(res, mx);
//ans = max(ans, pb);
}
if (cnt == 0) return max(res, *ms.begin());
auto it = ms.end();
it--;
it--;
auto it1 = it;
it1--;
if (cnt == 1){ return max(res, *ms.rbegin() + *it + L); assert(0);}
return max({res, *ms.rbegin() + *it + L, *it + *it1 + 2*L});
}
Compilation message
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:67:29: warning: unused variable 'pb' [-Wunused-variable]
67 | ll pc = path[i][0], pb = max(dis[pc][0], dis[pc][1]);
| ^~
dreaming.cpp:46:25: warning: unused variable 'j' [-Wunused-variable]
46 | ll n = N, m = M, i, j;
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
51 ms |
15464 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
5208 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
51 ms |
15464 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
13840 KB |
Output is correct |
2 |
Correct |
31 ms |
13828 KB |
Output is correct |
3 |
Correct |
28 ms |
13840 KB |
Output is correct |
4 |
Correct |
27 ms |
13840 KB |
Output is correct |
5 |
Correct |
28 ms |
13828 KB |
Output is correct |
6 |
Correct |
31 ms |
15324 KB |
Output is correct |
7 |
Correct |
37 ms |
14496 KB |
Output is correct |
8 |
Correct |
29 ms |
13528 KB |
Output is correct |
9 |
Correct |
29 ms |
13580 KB |
Output is correct |
10 |
Correct |
29 ms |
14084 KB |
Output is correct |
11 |
Correct |
1 ms |
5468 KB |
Output is correct |
12 |
Correct |
27 ms |
15364 KB |
Output is correct |
13 |
Correct |
20 ms |
15624 KB |
Output is correct |
14 |
Correct |
20 ms |
15884 KB |
Output is correct |
15 |
Correct |
22 ms |
15480 KB |
Output is correct |
16 |
Correct |
22 ms |
15616 KB |
Output is correct |
17 |
Correct |
22 ms |
15624 KB |
Output is correct |
18 |
Correct |
21 ms |
15628 KB |
Output is correct |
19 |
Correct |
21 ms |
15564 KB |
Output is correct |
20 |
Correct |
1 ms |
5212 KB |
Output is correct |
21 |
Correct |
1 ms |
5464 KB |
Output is correct |
22 |
Correct |
2 ms |
5724 KB |
Output is correct |
23 |
Correct |
21 ms |
15740 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
5208 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
51 ms |
15464 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |