제출 #1247550

#제출 시각아이디문제언어결과실행 시간메모리
1247550erering수천개의 섬 (IOI22_islands)C++20
26 / 100
39 ms31556 KiB
#include <bits/stdc++.h> #include "islands.h" using namespace std; #define pb push_back const int MAXN=1000+5; vector<int> adj[MAXN][MAXN]; vector<int> path; bool dfs(int node,int par){ pair<int,int> p={-1,-1}; for(int j=0;j<MAXN;j++){ if(j==par)continue; if(adj[node][j].size()>1){ path.pb(adj[node][j][0]); path.pb(adj[j][node][0]); path.pb(adj[node][j][1]); path.pb(adj[node][j][0]); path.pb(adj[j][node][0]); path.pb(adj[node][j][1]); return 1; } if(adj[node][j].size()>0){ if(p.first==-1)p.first=j; else p.second=j; } } if(p.second!=-1){ int idx1=adj[p.first][node][0],idx2=adj[p.second][node][0]; p.first=adj[node][p.first][0]; p.second=adj[node][p.second][0]; path.pb(p.first); path.pb(idx1); path.pb(p.second); path.pb(idx2); path.pb(idx1); path.pb(p.first); path.pb(idx2); path.pb(p.second); return 1; } for(int j=0;j<MAXN;j++){ if(j==par)continue; if(adj[node][j].size()>0){ path.pb(adj[node][j][0]); bool flag=dfs(j,node); if(flag){ path.pb(adj[node][j][0]); return 1; } else path.pop_back(); } } return 0; } variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) { for(int i=0;i<M;i++){ adj[U[i]][V[i]].pb(i); } bool flag=dfs(0,-1); if(!flag)return false; return path; }
#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...