Submission #1369305

#TimeUsernameProblemLanguageResultExecution timeMemory
1369305huangallenThousands Islands (IOI22_islands)C++20
1.75 / 100
27 ms10748 KiB
#include "islands.h"
#ifdef LOCAL
#include "grader.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define iint signed 
#define REP(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define RREP(i,n) for(int i=(n)-1;i>=0;i--)
#define RREP1(i,n) for(int i=(n);i>=1;i--)
#define f first
#define s second
#define pb push_back
#define ALL(x) (x).begin(),(x).end()
#define SZ(x) ((int)((x).size()))
#define pii pair<int,int>
#define Graph vector<vector<int>>
#define Graphw vector<vector<pii>>
template<typename S> void chmin(S &x,S y) { x=min(x,y); }
template<typename S> void chmax(S &x,S y) { x=max(x,y); }
#define Vi vector<int>
#define Vpii vector<pii>
#ifdef LOCAL
#define op(x) cout<<(#x)<<"="<<(x)<<", ";
#define ope(x) cout<<(#x)<<"="<<(x)<<endl;
#define oparr(x) {cout<<(#x)<<":";for(auto allen:(x)) cout<<allen<<" ";cout<<" size="<<(x).size()<<endl;}
#define entr cout<<endl;
#else
#define op(x) ;
#define ope(x) ;
#define oparr(x) ;
#define entr ;
#endif
template<typename S>
ostream& operator<<(ostream& os,vector<S> p) { for(auto allen:p) os<<allen<<' ';return os<<'\n'; }
template<typename S>
istream& operator>>(istream& os,vector<S> &p) { for(auto &allen:p) os>>allen;return os; }

std::variant<bool, std::vector<iint>> find_journey(
    iint N, iint M, std::vector<iint> U, std::vector<iint> V) {
	int n=N,m=M;
	Graphw g(n);
	REP(i,m) {
		g[U[i]].pb({V[i],i});
	} 
	Vi _vis(n);
	int root=0;
	Vi an0;
	while((root==0&&SZ(g[root])==1)||SZ(g[root])==4) {
		_vis[root]=1;
		for(auto [x,id]:g[root]) if(!_vis[x]) root=x,an0.pb(id);
	}
	ope(root)oparr(_vis)oparr(an0)
	Vi dep(n,-1);
	Vi vis=_vis;
	Vi an;
	auto dfs=[&](auto dfs,int u,int fa,int inv) ->void{
		vis[u]=1;
		for(auto [v,id]:g[u]) {
			if(_vis[v]) continue;
			if(v==fa) continue;
			if(vis[v]) {
				if(dep[v]>dep[u]) {
					op(u)ope(v)
					an.pb(id^inv);
					an.pb(id^1^inv);
				}
				continue;
			}
			dep[v]=dep[u]+1;
			an.pb(id^inv);
			dfs(dfs,v,u,inv);
			an.pb(id^1^inv);
		}
	};
	dfs(dfs,root,-1,0);
	vis=_vis;
	// dfs(dfs,root,-1,1);
	oparr(an0)
	oparr(an)
  	if(SZ(an)==0) return false;
	vector<iint> _an;
	REP(i,SZ(an0)) _an.pb(an0[i]);
	for(int x:an) _an.pb(x);
	for(int x:an) _an.pb(x^1);
	RREP(i,SZ(an0)) _an.pb(an0[i]);
	return _an;
}


/*
4 8
0 1
1 0
1 2
2 1
1 3
3 1
2 3
3 2

4 12
0 1
1 0
0 2
2 0
0 3
3 0
1 2
2 1
1 3
3 1
2 3
3 2
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...