답안 #935066

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
935066 2024-02-28T13:36:52 Z anton 꿈 (IOI13_dreaming) C++17
10 / 100
1000 ms 24532 KB
#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 -