Submission #637283

#TimeUsernameProblemLanguageResultExecution timeMemory
637283FidanThousands Islands (IOI22_islands)C++17
10 / 100
1117 ms788404 KiB
#include <bits/stdc++.h> #include <variant> #include "islands.h" using namespace std; typedef int ll; variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v){ if(n==2){ ll a=-1, b=-1, c=-1; for(ll i=0; i<m; i++){ if(u[i]==0){ if(a==-1) a=i; else b=i; } else c=i; } if(b==-1 || c==-1) return false; return vector<int>({a, c, b, a, c, b}); } else if(m==n*(n-1)){ ll a=-1, b=-1, c=-1, d=-1, e=-1, f=-1; for(ll i=0; i<m; i++){ if(u[i]==0 && v[i]==1) a=i; if(u[i]==1 && v[i]==0) b=i; if(u[i]==1 && v[i]==2) c=i; if(u[i]==2 && v[i]==1) d=i; if(u[i]==2 && v[i]==0) e=i; if(u[i]==0 && v[i]==2) f=i; } return vector<int>({a, c, e, f, d, b, e, c, a, b, d, f}); } else{ vector<vector<pair<ll, ll>>> g(n); for(ll i=0; i<m; i++){ g[u[i]].push_back({v[i], i}); } if(g[0].size()>=2){ ll a=g[0][0].second, b=g[0][1].second; ll a1, b1; if(a%2==0) a1=a+1; else a1=a-1; if(b%2==0) b1=b+1; else b1=b-1; return vector<int>({a, a1, b, b1, a1, a, b1, b}); } else{ bool f=false; for(ll i=0; i<n; i++){ if(g[i].size()>=3) f=true; } if(!f) return false; vector<ll> res1, res; res1.push_back(g[0][0].second); res.push_back(g[0][0].second); ll l=g[0][0].first, k=0; while(g[l].size()<3){ if(g[l][0].first==k){ res1.push_back(g[l][1].second); res.push_back(g[l][1].second); k=l; l=g[l][1].first; } else{ res1.push_back(g[l][0].second); res.push_back(g[l][0].second); k=l; l=g[l][0].first; } } ll a=-1, b=-1; for(ll i=0; i<3; i++){ if(g[l][i].first!=k){ if(a==-1) a=g[l][i].second; else b=g[l][i].second; } } ll a1, b1; if(a%2==0) a1=a+1; else a1=a-1; if(b%2==0) b1=b+1; else b1=b-1; res.push_back(a); res.push_back(a1); res.push_back(b); res.push_back(b1); res.push_back(a1); res.push_back(a); res.push_back(b1); res.push_back(b); reverse(res1.begin(), res1.end()); for(ll asdf:res1) res.push_back(asdf); return res; } } } //~ int main(){ //~ int n, m; //~ cin>>n>>m; //~ vector<ll> u(m), v(m); //~ for(ll i=0; i<m; i++){ //~ cin>>u[i]>>v[i]; //~ } //~ vector<ll> r=find_journey(n, m, u, v); //~ for(ll k:r) cout<<k<<" "; //~ return 0; //}
#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...