#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
int n, m, l;
vector<pair<int, int> > grafo[112345];
vector<int> comp[112345];
int compid[112345];
int altura[112345];
int centro[112345], maxraio[112345];
int marc1[112345], marc2[112345], marc3[112345];
int maxd, maxdi, qtdcomp, cf, cfi;
void dfs1(int x){
marc1[x] = 1;
comp[qtdcomp].push_back(x);
for(int i = 0; i < grafo[x].size(); i++){
int viz = grafo[x][i].first;
if(!marc1[viz]){
altura[viz] = altura[x] + grafo[x][i].second;
if(altura[viz] >= maxd){
maxd = altura[viz];
maxdi = viz;
}
dfs1(viz);
}
}
}
void dfs2(int x){
marc2[x] = 1;
for(int i = 0; i < grafo[x].size(); i++){
int viz = grafo[x][i].first;
if(!marc2[viz]){
altura[viz] = altura[x] + grafo[x][i].second;
maxd = max(maxd, altura[viz]);
dfs2(viz);
}
}
}
bool cmp(int a, int b){
return a > b;
}
void dfs3(int x){
marc3[x] = 1;
for(int i = 0; i < grafo[x].size(); i++){
int viz = grafo[x][i].first;
if(!marc3[viz]){
altura[viz] = altura[x] + grafo[x][i].second;
maxd = max(maxd, altura[viz]);
dfs3(viz);
}
}
}
int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
n = N, m = M, l = L;
for(int i = 0; i < m; i++){
//int a, b, t;
//scanf("%d %d", &a, &b, &t);
grafo[A[i]].push_back(make_pair(B[i], T[i]));
grafo[B[i]].push_back(make_pair(A[i], T[i]));
}
//printf("%d\n", n);
for(int i = 0; i < n; i++){
if(!marc1[i]){
maxd = 0;
dfs1(i);
altura[maxdi] = 0;
maxd = 0;
dfs2(maxdi);
int centrodesse = 1e9 + 7, cdi;
for(int j = 0; j < comp[qtdcomp].size(); j++){
if(abs(altura[comp[qtdcomp][j]] - maxd/2) <= centrodesse){
cdi = comp[qtdcomp][j];
centrodesse = abs(altura[comp[qtdcomp][j]] - maxd/2);
}
}
centro[qtdcomp] = cdi;
maxd = 0;
altura[cdi] = 0;
dfs3(cdi);
maxraio[qtdcomp] = maxd;
qtdcomp++;
}
}
sort(maxraio, maxraio + qtdcomp, cmp);
int ans = 0;
//printf("%d\n", maxraio[cfi]);
if(qtdcomp > 1){
ans = max(ans, maxraio[0] + maxraio[1] + l);
if(qtdcomp > 2){
ans = max(ans, maxraio[1] + maxraio[2] + 2*l);
}
}
return ans;
}
Compilation message
dreaming.cpp: In function 'void dfs1(int)':
dreaming.cpp:16:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < grafo[x].size(); i++){
~~^~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs2(int)':
dreaming.cpp:34:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < grafo[x].size(); i++){
~~^~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs3(int)':
dreaming.cpp:52:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < grafo[x].size(); i++){
~~^~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:86:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j = 0; j < comp[qtdcomp].size(); j++){
~~^~~~~~~~~~~~~~~~~~~~~~
dreaming.cpp:92:20: warning: 'cdi' may be used uninitialized in this function [-Wmaybe-uninitialized]
centro[qtdcomp] = cdi;
~~~~~~~~~~~~~~~~^~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
61 ms |
14324 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
61 ms |
14324 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
61 ms |
14324 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
38 ms |
11896 KB |
Output is correct |
2 |
Correct |
40 ms |
11904 KB |
Output is correct |
3 |
Correct |
38 ms |
12280 KB |
Output is correct |
4 |
Correct |
40 ms |
12280 KB |
Output is correct |
5 |
Correct |
37 ms |
12280 KB |
Output is correct |
6 |
Correct |
41 ms |
12664 KB |
Output is correct |
7 |
Correct |
40 ms |
12672 KB |
Output is correct |
8 |
Correct |
37 ms |
12152 KB |
Output is correct |
9 |
Correct |
36 ms |
12100 KB |
Output is correct |
10 |
Correct |
39 ms |
12544 KB |
Output is correct |
11 |
Correct |
8 ms |
5632 KB |
Output is correct |
12 |
Correct |
18 ms |
11136 KB |
Output is correct |
13 |
Correct |
19 ms |
11136 KB |
Output is correct |
14 |
Correct |
19 ms |
11136 KB |
Output is correct |
15 |
Correct |
19 ms |
11136 KB |
Output is correct |
16 |
Correct |
18 ms |
11136 KB |
Output is correct |
17 |
Correct |
18 ms |
10880 KB |
Output is correct |
18 |
Correct |
18 ms |
11136 KB |
Output is correct |
19 |
Correct |
18 ms |
11136 KB |
Output is correct |
20 |
Correct |
7 ms |
5632 KB |
Output is correct |
21 |
Correct |
7 ms |
5504 KB |
Output is correct |
22 |
Correct |
8 ms |
5888 KB |
Output is correct |
23 |
Correct |
20 ms |
11136 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
61 ms |
14324 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
61 ms |
14324 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |