제출 #797251

#제출 시각아이디문제언어결과실행 시간메모리
797251penguinmanThousands Islands (IOI22_islands)C++17
10.15 / 100
36 ms10692 KiB
#include "islands.h" #include <bits/stdc++.h> #include <variant> using std::cin; using std::cout; using std::endl; using std::vector; using std::string; using ll = int; using vi = vector<ll>; using vii = vector<vi>; using pii = std::pair<ll,ll>; #define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++) #define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++) #define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--) #define all(a) a.begin(),a.end() #define pb emplace_back #define ln "\n" struct directed_graph{ ll N; vii edge, revedge; vi par; vii V; directed_graph(vii E){ N = E.size(); edge.resize(N); revedge.resize(N); par.resize(N); V.resize(N); rep(i,0,N){ for(auto j: E[i]){ edge[i].pb(j); revedge[j].pb(i); } } } vi ord; vector<bool> flag; void dfs1(ll now){ flag[now] = true; for(auto next: edge[now]){ if(flag[next]) continue; dfs1(next); } ord.pb(now); } void dfs2(ll p, ll now){ flag[now] = true; par[now] = p; for(auto next: revedge[now]){ if(flag[next]) continue; dfs2(p, next); } } void SCC(){ flag.resize(N); rep(i,0,N){ if(!flag[i]) dfs1(i); } reverse(all(ord)); flag.assign(N,false); for(auto el: ord){ if(!flag[el]){ dfs2(el,el); } } rep(i,0,N) V[par[i]].pb(i); } }; std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) { vii edge(N), index(N); rep(i,0,M){ edge[U[i]].pb(V[i]); index[U[i]].pb(i); } directed_graph G(edge); G.SCC(); { std::queue<ll> que; que.push(0); vi flag(N); flag[0] = true; while(!que.empty()){ ll now = que.front(); que.pop(); if(G.V[G.par[now]].size() >= 2 && edge[now].size() >= 2) return true; for(auto next: edge[now]){ if(flag[next]) continue; flag[next] = true; que.push(next); } } } 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...