제출 #853565

#제출 시각아이디문제언어결과실행 시간메모리
853565LudisseyLongest Trip (IOI23_longesttrip)C++17
40 / 100
704 ms600 KiB
#include <bits/stdc++.h>
#include "longesttrip.h"
using namespace std;

std::vector<int> longest_trip(int n, int d)
{
    if(d==2){
        vector<pair<int,int>> disc;
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++)
            {
                if(!are_connected({i}, {j})){
                    disc.push_back({i,j});
                    break;
                }
            }
        }
        vector<bool> rem(n);
        vector<int> path(disc.size()*2);
        int mid=disc.size();
        for (int i = 0; i < (int)disc.size(); i++)
        {
            path[i]=disc[i].first;
            path[i+mid]=disc[i].second;
            rem[disc[i].first]=true;
            rem[disc[i].second]=true;
        }
        for (int i = 0; i < n; i++) {
            if(!rem[i]) path.push_back(i);
        }
        if(disc.size()==1) swap(path[1],path[2]);
        return path;
    }
    vector<int> A;
    vector<int> B;
    A.push_back(0);
    for (int i = 1; i < n; i++)
    {
        if(are_connected({i}, {A.back()})) A.push_back(i);
        else if(B.size()==0 || are_connected({i}, {B.back()})) B.push_back(i);
        else {
            for (int x = B.size()-1; x >= 0; x--) A.push_back(B[x]);
            B.clear();
        }
    }
    if(A.size()<B.size()) swap(A,B);
    return A;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...