Submission #1351300

#TimeUsernameProblemLanguageResultExecution timeMemory
1351300yyc000123Fun Tour (APIO20_fun)C++20
26 / 100
18 ms3092 KiB
#include<bits/stdc++.h>
using namespace std ;
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 505 ;
const int Q = 4e5+5 ;
int n , dis[N][N] , par[N] , vis1[N] ;
vector<tuple<int,int,int>> vt ;
vector<int> nei[N] , ans ;

int hoursRequired(int x , int y) ;
int attractionsBehind(int x , int y) ;

int p(int k){
    if(par[k]<0) return k ;
    else return par[k]=p(par[k]) ;
}

int bfs(int node){
    queue<int> q ;
    int vis[N] ;
    memset(vis,0,sizeof(vis)) ;
    q.push(node) ; vis[node]=1 ;
    while(!q.empty()){
        int k = q.front() ; q.pop() ;
        for(int i:nei[k]){
            if(vis[i] || vis1[i]) continue ;
            q.push(i) ; vis[i]=1 ;
        }
        if(q.empty()) return k ;
    }
    return -1 ;
}

vector<int> createFunTour(int n1 , int q){
    n = n1 ;
    for(int i=0 ; i<n ; i++){
        for(int j=i+1 ; j<n ; j++) dis[i][j]=dis[j][i]=hoursRequired(i,j) , vt.push_back({dis[i][j],i,j}) ;
    }
    sort(vt.begin(),vt.end()) ;
    memset(par,-1,sizeof(par)) ;
    for(int i=0 ; i<vt.size() ; i++){
        int u = g1(vt[i]) , v = g2(vt[i]) , pu = p(u) , pv = p(v) ;
        if(pu==pv) continue ;
        if(par[pu]<=par[pv]) par[pu]+=par[pv] , par[pv]=pu ;
        else par[pv]+=par[pu] , par[pu]=pv ;
        nei[u].push_back(v) ; nei[v].push_back(u) ;
    }
    int node = bfs(bfs(1)) , cnt = n ;
    while(cnt){
        ans.push_back(node) ;
        vis1[node]=1 ;
        node=bfs(node) ;
        cnt-- ;
    }
    return ans ;
}
#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...