제출 #1077894

#제출 시각아이디문제언어결과실행 시간메모리
1077894pcc수천개의 섬 (IOI22_islands)C++17
0 / 100
1119 ms721092 KiB
#include "islands.h" #include <variant> #include <vector> #include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fs first #define sc second const int mxn = 4e5+10; int head[mxn],nid[mxn],to[mxn]; int ecnt = 0; int up[mxn]; void add_edge(int a,int b){ nid[ecnt] = head[a]; head[a] = ecnt; to[ecnt] = b; ecnt++; return; } vector<int> ansv; void getans(int cyc,int now){ vector<int> v; v.push_back(cyc); while(now != to[cyc]){ int eid = up[now]; v.push_back(eid); now = to[eid^1]; } reverse(v.begin(),v.end()); vector<int> rt; while(now != 0){ int eid = up[now]; rt.push_back(eid); now = to[eid^1]; } reverse(rt.begin(),rt.end()); /* cerr<<"ANS: "<<endl; for(auto &i:rt)cerr<<to[i]<<' ';cerr<<endl; for(auto &i:v)cerr<<to[i]<<' ';cerr<<endl; */ for(auto it = rt.begin();it != rt.end();it++)ansv.push_back(*it); for(auto it = v.begin();it != v.end();it++)ansv.push_back(*it); for(auto it = v.rbegin();it != v.rend();it++)ansv.push_back((*it)^1); for(auto it = v.rbegin();it != v.rend();it++)ansv.push_back(*it); for(auto it = v.begin();it != v.end();it++)ansv.push_back((*it)^1); for(auto it = rt.rbegin();it != rt.rend();it++)ansv.push_back(*it); return; } bitset<mxn> vis; void dfs(int now){ if(!ansv.empty())return; vis[now] = true; //cerr<<now<<endl; for(int eid = head[now];eid != -1;eid = nid[eid]){ if(!ansv.empty())return; int nxt = to[eid]; //cerr<<now<<' '<<nxt<<":"<<eid<<endl; if((eid^1) == up[now])continue; if(vis[nxt]){ getans(eid,now); return; } else{ up[nxt] = eid; dfs(nxt); } } return; } std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) { memset(head,-1,sizeof(head)); for(int i = 0;i<M;i++){ int a = U[i],b = V[i]; add_edge(a,b); } memset(up,-1,sizeof(up)); dfs(0); if(!ansv.empty())return ansv; else return false; }
#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...