Submission #1056987

#TimeUsernameProblemLanguageResultExecution timeMemory
1056987MalixThousands Islands (IOI22_islands)C++17
17.35 / 100
16 ms5376 KiB
#include "islands.h" #include <variant> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; int n,m; vi ans; vector<pii> arr; vi vis; void bfs(int x){ vis[x]=1; int s=arr[x].size(); if(s==1){ ans.PB(-1); return; } if(s==2){ int k=0; if(vis[arr[x][0].F])k++; ans.PB(arr[x][k].S); bfs(arr[x][k].F); if(ans.back()==-1)return; ans.PB(arr[x][k].S); return; } int k=0; if(vis[arr[x][k].F])k++; int z=arr[x][k].S; int y=-1; for(auto u:arr[arr[x][k].F])if(u.F==x)y=u.S; k++; if(vis[arr[x][k].F])k++; int c=arr[x][k].S; int d=-1; for(auto u:arr[arr[x][k].F])if(u.F==x)d=u.S; ans.PB(z);ans.PB(y);ans.PB(c);ans.PB(d);ans.PB(y);ans.PB(z);ans.PB(d);ans.PB(c); return; } std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) { n=N;m=M; if(n==2){ if(m<=2)return false; vi a; REP(i,0,m)if(U[i]==0)a.PB(i); int p=-1; REP(i,0,m)if(U[i]!=0)p=i; int k=a.size(); if(k<2||p==-1)return false; ans.PB(a[0]);ans.PB(p);ans.PB(a[1]);ans.PB(a[0]);ans.PB(p);ans.PB(a[1]); return ans; } arr.resize(n); REP(i,0,m)arr[U[i]].PB({V[i],i}); if(arr[0].size()>=2){ int x=arr[0][0].S; int y=-1; for(auto u:arr[arr[0][0].F])if(u.F==0)y=u.S; int c=arr[0][1].S; int d=-1; for(auto u:arr[arr[0][1].F])if(u.F==0)d=u.S; ans.PB(x);ans.PB(y);ans.PB(c);ans.PB(d);ans.PB(y);ans.PB(x);ans.PB(d);ans.PB(c); return ans; } if(arr[0].empty())return false; vis.resize(n,0); vis[0]=1; ans.PB(arr[0][0].S); bfs(arr[0][0].F); if(ans.back()==-1)return false; ans.PB(arr[0][0].S); 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...