Submission #1006875

#TimeUsernameProblemLanguageResultExecution timeMemory
1006875edogawa_somethingLongest Trip (IOI23_longesttrip)C++17
5 / 100
763 ms848 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vii; typedef pair<ll,ll> pii; #define pb push_back #define F first #define S second #define all(v) v.begin(),v.end() const int M=1010; const ll inf=1e18; struct dsu{ ll sz[M],pa[M]; void init(ll x){ for(int i=0;i<=x;i++) pa[i]=i,sz[i]=1; } ll get(ll x){ if(x==pa[x]) return x; return pa[x]=get(pa[x]); } void unite(ll x,ll y){ x=get(x),y=get(y); if(x==y) return; if(sz[x]<sz[y]) swap(x,y); pa[y]=x; sz[x]+=sz[y]; } bool same(ll x,ll y){ return (get(x)==get(y)); } }d; ll n; bool edge[M][M],vis[M]; bool used[M]; std::vector<int> longest_trip(int N, int D) { n=N; d.init(n); vector<int>ans; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ edge[i][j]=edge[j][i]=are_connected({i},{j}); } } for(int i=0;i<n;i++){ vii v; for(int j=0;j<n;j++){ if(j==i) continue; else if(!edge[i][j]){ v.pb(j); } } for(int j=0;j<ll(v.size())-1;j++) d.unite(v[j],v[j+1]); for(auto it:v) used[it]=1; } bool chk=1; for(int i=0;i<n;i++){ if(used[i]) chk=0; } if(chk){ for(int i=0;i<n;i++){ ans.pb(i); } return ans; } ll last=-1; vii v1,v2; for(int i=0;i<n;i++){ if(used[i]){ if(last==-1){ last=i; v1.pb(i); } else if(d.same(i,last)) v1.pb(i); else v2.pb(i); } else v2.pb(i); } bool c=0; for(auto it:v1){ for(auto itt:v2){ if(edge[it][itt]){ vis[it]=vis[itt]=1; c=1; break; } } if(c) break; } if(!c){ if(v1.size()<v2.size()) swap(v1,v2); for(auto it:v1) ans.pb(it); return ans; } ll x=0; for(auto it:v1){ if(!vis[it]) ans.pb(it); else x=it; } ans.pb(x); for(auto it:v2){ if(vis[it]) ans.pb(it); } for(auto it:v2){ if(!vis[it]) ans.pb(it); } 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...