답안 #848231

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
848231 2023-09-11T17:40:54 Z bachhoangxuan 가장 긴 여행 (IOI23_longesttrip) C++17
100 / 100
11 ms 1236 KB
#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng;
const int maxn=305;
vector<int> cc[maxn];

vector<int> longest_trip(int N, int D)
{
    rng.seed(998244353);
    for(int i=0;i<N;i++) cc[i].clear();
    vector<int> res={0};
    vector<int> s;
    for(int i=1;i<N;i++){
        cc[i].push_back(i);
        s.push_back(i);
    }
    while(!s.empty()){
        int st=-1,cnt=0;
        bool check=false;
        shuffle(s.begin(),s.end(),rng);
        for(int x:s){
            cnt++;
            if(!are_connected({res.back()},cc[x])){
                if(st==-1) st=x;
                else for(int u:cc[x]) cc[st].push_back(u);
            }
            else{
                check=true;
                int l=1,r=(int)cc[x].size();
                while(l<r){
                    int mid=(l+r)>>1;
                    vector<int> v(cc[x].begin(),cc[x].begin()+mid);
                    if(are_connected({res.back()},v)) r=mid;
                    else l=mid+1;
                }
                r--;
                res.push_back(cc[x][r]);
                for(int u:cc[x]) if(u!=cc[x][r]) res.push_back(u);
                break;
            }
        }
        s.erase(s.begin(),s.begin()+cnt);
        if(!check){
            int l=1,r=(int)cc[st].size(),p=-1;
            while(l<=r){
                int mid=(l+r)>>1;
                vector<int> v(cc[st].begin(),cc[st].begin()+mid);
                if(are_connected(res,v)) p=cc[st][mid-1],r=mid-1;
                else l=mid+1;
            }
            if(p==-1){
                if((int)cc[st].size()>(int)res.size()) swap(res,cc[st]);
            }
            else{
                reverse(res.begin(),res.end());
                if(!are_connected({res.back()},{p})){
                    l=1,r=(int)res.size();
                    while(l<r){
                        int mid=(l+r)>>1;
                        vector<int> v(res.begin(),res.begin()+mid);
                        if(are_connected({p},v)) r=mid;
                        else l=mid+1;
                    }
                    res.insert(res.end(),res.begin(),res.begin()+r);
                    res.erase(res.begin(),res.begin()+r);

                }
                res.push_back(p);
                for(int u:cc[st]) if(u!=p) res.push_back(u);
            }
        }
        else if(st!=-1) s.push_back(st);
    }
    return res;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 6 ms 344 KB Output is correct
4 Correct 5 ms 344 KB Output is correct
5 Correct 7 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 344 KB Output is correct
2 Correct 7 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 6 ms 344 KB Output is correct
5 Correct 7 ms 344 KB Output is correct
6 Correct 7 ms 344 KB Output is correct
7 Correct 6 ms 344 KB Output is correct
8 Correct 5 ms 344 KB Output is correct
9 Correct 5 ms 344 KB Output is correct
10 Correct 6 ms 344 KB Output is correct
11 Correct 6 ms 344 KB Output is correct
12 Correct 6 ms 440 KB Output is correct
13 Correct 7 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 5 ms 344 KB Output is correct
5 Correct 6 ms 344 KB Output is correct
6 Correct 9 ms 344 KB Output is correct
7 Correct 5 ms 344 KB Output is correct
8 Correct 5 ms 344 KB Output is correct
9 Correct 6 ms 344 KB Output is correct
10 Correct 6 ms 596 KB Output is correct
11 Correct 6 ms 344 KB Output is correct
12 Correct 6 ms 344 KB Output is correct
13 Correct 6 ms 344 KB Output is correct
14 Correct 8 ms 344 KB Output is correct
15 Correct 8 ms 344 KB Output is correct
16 Correct 6 ms 344 KB Output is correct
17 Correct 6 ms 600 KB Output is correct
18 Correct 6 ms 344 KB Output is correct
19 Correct 6 ms 344 KB Output is correct
20 Correct 6 ms 344 KB Output is correct
21 Correct 8 ms 444 KB Output is correct
22 Correct 7 ms 344 KB Output is correct
23 Correct 7 ms 344 KB Output is correct
24 Correct 7 ms 344 KB Output is correct
25 Correct 7 ms 344 KB Output is correct
26 Correct 9 ms 344 KB Output is correct
27 Correct 6 ms 344 KB Output is correct
28 Correct 7 ms 344 KB Output is correct
29 Correct 8 ms 344 KB Output is correct
30 Correct 5 ms 344 KB Output is correct
31 Correct 7 ms 448 KB Output is correct
32 Correct 7 ms 456 KB Output is correct
33 Correct 5 ms 600 KB Output is correct
34 Correct 5 ms 344 KB Output is correct
35 Correct 6 ms 600 KB Output is correct
36 Correct 6 ms 344 KB Output is correct
37 Correct 7 ms 344 KB Output is correct
38 Correct 8 ms 600 KB Output is correct
39 Correct 8 ms 460 KB Output is correct
40 Correct 7 ms 608 KB Output is correct
41 Correct 8 ms 972 KB Output is correct
42 Correct 8 ms 972 KB Output is correct
43 Correct 7 ms 600 KB Output is correct
44 Correct 8 ms 476 KB Output is correct
45 Correct 9 ms 344 KB Output is correct
46 Correct 7 ms 344 KB Output is correct
47 Correct 10 ms 344 KB Output is correct
48 Correct 8 ms 344 KB Output is correct
49 Correct 8 ms 344 KB Output is correct
50 Correct 5 ms 452 KB Output is correct
51 Correct 6 ms 452 KB Output is correct
52 Correct 7 ms 452 KB Output is correct
53 Correct 6 ms 600 KB Output is correct
54 Correct 6 ms 600 KB Output is correct
55 Correct 7 ms 600 KB Output is correct
56 Correct 7 ms 720 KB Output is correct
57 Correct 7 ms 616 KB Output is correct
58 Correct 8 ms 740 KB Output is correct
59 Correct 8 ms 724 KB Output is correct
60 Correct 8 ms 860 KB Output is correct
61 Correct 9 ms 700 KB Output is correct
62 Correct 8 ms 720 KB Output is correct
63 Correct 8 ms 872 KB Output is correct
64 Correct 8 ms 972 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 6 ms 344 KB Output is correct
5 Correct 7 ms 344 KB Output is correct
6 Correct 8 ms 344 KB Output is correct
7 Correct 7 ms 344 KB Output is correct
8 Correct 6 ms 344 KB Output is correct
9 Correct 5 ms 344 KB Output is correct
10 Correct 6 ms 344 KB Output is correct
11 Correct 7 ms 344 KB Output is correct
12 Correct 7 ms 344 KB Output is correct
13 Correct 6 ms 344 KB Output is correct
14 Correct 11 ms 344 KB Output is correct
15 Correct 7 ms 344 KB Output is correct
16 Correct 9 ms 344 KB Output is correct
17 Correct 6 ms 600 KB Output is correct
18 Correct 6 ms 344 KB Output is correct
19 Correct 6 ms 344 KB Output is correct
20 Correct 6 ms 340 KB Output is correct
21 Correct 7 ms 344 KB Output is correct
22 Correct 8 ms 344 KB Output is correct
23 Correct 6 ms 344 KB Output is correct
24 Correct 9 ms 344 KB Output is correct
25 Correct 7 ms 344 KB Output is correct
26 Correct 6 ms 344 KB Output is correct
27 Correct 6 ms 448 KB Output is correct
28 Correct 6 ms 452 KB Output is correct
29 Correct 6 ms 600 KB Output is correct
30 Correct 6 ms 344 KB Output is correct
31 Correct 6 ms 344 KB Output is correct
32 Correct 8 ms 344 KB Output is correct
33 Correct 9 ms 344 KB Output is correct
34 Correct 10 ms 344 KB Output is correct
35 Correct 8 ms 344 KB Output is correct
36 Correct 10 ms 344 KB Output is correct
37 Correct 6 ms 448 KB Output is correct
38 Correct 7 ms 708 KB Output is correct
39 Correct 8 ms 448 KB Output is correct
40 Correct 6 ms 456 KB Output is correct
41 Correct 7 ms 600 KB Output is correct
42 Correct 7 ms 600 KB Output is correct
43 Correct 8 ms 344 KB Output is correct
44 Correct 7 ms 344 KB Output is correct
45 Correct 6 ms 344 KB Output is correct
46 Correct 7 ms 344 KB Output is correct
47 Correct 6 ms 344 KB Output is correct
48 Correct 8 ms 344 KB Output is correct
49 Correct 8 ms 460 KB Output is correct
50 Correct 8 ms 716 KB Output is correct
51 Correct 10 ms 604 KB Output is correct
52 Correct 8 ms 968 KB Output is correct
53 Correct 9 ms 600 KB Output is correct
54 Correct 7 ms 612 KB Output is correct
55 Correct 8 ms 728 KB Output is correct
56 Correct 8 ms 344 KB Output is correct
57 Correct 7 ms 612 KB Output is correct
58 Correct 8 ms 728 KB Output is correct
59 Correct 9 ms 980 KB Output is correct
60 Correct 8 ms 1112 KB Output is correct
61 Correct 8 ms 600 KB Output is correct
62 Correct 7 ms 860 KB Output is correct
63 Correct 8 ms 724 KB Output is correct
64 Correct 8 ms 476 KB Output is correct
65 Correct 8 ms 864 KB Output is correct
66 Correct 8 ms 712 KB Output is correct
67 Correct 9 ms 720 KB Output is correct
68 Correct 7 ms 1236 KB Output is correct
69 Correct 8 ms 868 KB Output is correct
70 Correct 9 ms 868 KB Output is correct
71 Correct 7 ms 856 KB Output is correct
72 Correct 8 ms 728 KB Output is correct
73 Correct 8 ms 976 KB Output is correct
74 Correct 8 ms 872 KB Output is correct
75 Correct 8 ms 600 KB Output is correct
76 Correct 8 ms 720 KB Output is correct
77 Correct 7 ms 728 KB Output is correct
78 Correct 8 ms 728 KB Output is correct
79 Correct 8 ms 608 KB Output is correct
80 Correct 10 ms 864 KB Output is correct
81 Correct 9 ms 728 KB Output is correct
82 Correct 9 ms 976 KB Output is correct