#include<bits/stdc++.h>
#include "dreaming.h"
using namespace std;
#define pii pair<int, int>
struct Tree{
vector<vector<pii>> adj;
vector<int> longest;
int min_len = 1e9;
int diameter= 0;
};
const int MAX_N= 1e5;
vector<pii> madj[MAX_N+2];
bool vis[MAX_N+2];
vector<Tree> forest;
Tree sTree;
void get_tree(int id, int anc){
//cout<<id<<endl;
vis[id] = true;
int tree_id = sTree.adj.size();
sTree.adj.push_back(vector<pii>(0));
for(auto e: madj[id]){
if(e.first!=anc){
int future_id = sTree.adj.size();
get_tree(e.first, id);
sTree.adj[tree_id].push_back(pii(future_id, e.second));
sTree.adj[future_id].push_back(pii(tree_id, e.second));
}
}
//cout<<id<<" done "<<endl;
}
pii get_len(int id, int anc, Tree& tr){
vector<int> ch;
ch.push_back(0);
ch.push_back(0);
int max_diam = 0;
for(auto e: tr.adj[id]){
if(e.first!=anc){
pii ch_ans = get_len(e.first, id, tr);
ch.push_back(ch_ans.first+e.second);
max_diam = max(max_diam, ch_ans.second);
}
}
sort(ch.begin(), ch.end());
return pii(ch[ch.size()-1], max(max_diam, ch[ch.size()-1]+ch[ch.size()-2]));
}
signed travelTime(signed N,signed M, signed L,signed A[], signed B[], signed T[]) {
for(int i =0; i<M; i++){
madj[A[i]].push_back(pii(B[i], T[i]));
madj[B[i]].push_back(pii(A[i], T[i]));
}
fill(&vis[0], &vis[MAX_N], false);
for(int i = 0; i<N; i++){
/*for(auto e: madj[i]){
cout<<e.first<<" ";
}
cout<<endl;*/
if(!vis[i]){
//cerr<<i<<endl;
sTree.adj.clear();
get_tree(i, -1);
forest.push_back(sTree);
}
}
//cout<<forest.size()<<endl;
for(int j = 0; j<forest.size(); j++){
forest[j].longest.resize(forest[j].adj.size());
for(int i = 0; i<forest[j].adj.size(); i++){
pii d = get_len(i, -1, forest[j]);
//pii d = {100, 100};
forest[j].longest[i] =d.first;
forest[j].diameter = d.second;
forest[j].min_len= min(forest[j].min_len, forest[j].longest[i]);
}
//cout<<forest[j].diameter<<endl;
}
if(forest.size()==1){
return forest[0].diameter;
}
return max(forest[0].min_len + forest[1].min_len + L, max(forest[0].diameter, forest[1].diameter));
}
Compilation message
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:80:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Tree>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
80 | for(int j = 0; j<forest.size(); j++){
| ~^~~~~~~~~~~~~~
dreaming.cpp:83:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
83 | for(int i = 0; i<forest[j].adj.size(); i++){
| ~^~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1055 ms |
24532 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
3672 KB |
Output is correct |
2 |
Correct |
3 ms |
3676 KB |
Output is correct |
3 |
Correct |
2 ms |
3676 KB |
Output is correct |
4 |
Correct |
2 ms |
3676 KB |
Output is correct |
5 |
Correct |
2 ms |
3676 KB |
Output is correct |
6 |
Correct |
2 ms |
3676 KB |
Output is correct |
7 |
Correct |
2 ms |
3676 KB |
Output is correct |
8 |
Correct |
2 ms |
3676 KB |
Output is correct |
9 |
Correct |
2 ms |
3676 KB |
Output is correct |
10 |
Correct |
2 ms |
3676 KB |
Output is correct |
11 |
Correct |
2 ms |
3676 KB |
Output is correct |
12 |
Correct |
2 ms |
3676 KB |
Output is correct |
13 |
Correct |
2 ms |
3900 KB |
Output is correct |
14 |
Correct |
3 ms |
3676 KB |
Output is correct |
15 |
Correct |
1 ms |
3676 KB |
Output is correct |
16 |
Correct |
2 ms |
3676 KB |
Output is correct |
17 |
Correct |
2 ms |
3672 KB |
Output is correct |
18 |
Correct |
2 ms |
3676 KB |
Output is correct |
19 |
Correct |
2 ms |
3676 KB |
Output is correct |
20 |
Correct |
2 ms |
3676 KB |
Output is correct |
21 |
Correct |
2 ms |
3676 KB |
Output is correct |
22 |
Correct |
2 ms |
3676 KB |
Output is correct |
23 |
Correct |
2 ms |
3872 KB |
Output is correct |
24 |
Correct |
2 ms |
3676 KB |
Output is correct |
25 |
Correct |
2 ms |
3676 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1055 ms |
24532 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
32 ms |
16160 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
3672 KB |
Output is correct |
2 |
Correct |
3 ms |
3676 KB |
Output is correct |
3 |
Correct |
2 ms |
3676 KB |
Output is correct |
4 |
Correct |
2 ms |
3676 KB |
Output is correct |
5 |
Correct |
2 ms |
3676 KB |
Output is correct |
6 |
Correct |
2 ms |
3676 KB |
Output is correct |
7 |
Correct |
2 ms |
3676 KB |
Output is correct |
8 |
Correct |
2 ms |
3676 KB |
Output is correct |
9 |
Correct |
2 ms |
3676 KB |
Output is correct |
10 |
Correct |
2 ms |
3676 KB |
Output is correct |
11 |
Correct |
2 ms |
3676 KB |
Output is correct |
12 |
Correct |
2 ms |
3676 KB |
Output is correct |
13 |
Correct |
2 ms |
3900 KB |
Output is correct |
14 |
Correct |
3 ms |
3676 KB |
Output is correct |
15 |
Correct |
1 ms |
3676 KB |
Output is correct |
16 |
Correct |
2 ms |
3676 KB |
Output is correct |
17 |
Correct |
2 ms |
3672 KB |
Output is correct |
18 |
Correct |
2 ms |
3676 KB |
Output is correct |
19 |
Correct |
2 ms |
3676 KB |
Output is correct |
20 |
Correct |
2 ms |
3676 KB |
Output is correct |
21 |
Correct |
2 ms |
3676 KB |
Output is correct |
22 |
Correct |
2 ms |
3676 KB |
Output is correct |
23 |
Correct |
2 ms |
3872 KB |
Output is correct |
24 |
Correct |
2 ms |
3676 KB |
Output is correct |
25 |
Correct |
2 ms |
3676 KB |
Output is correct |
26 |
Incorrect |
3 ms |
3928 KB |
Output isn't correct |
27 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1055 ms |
24532 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |