Submission #1059982

#TimeUsernameProblemLanguageResultExecution timeMemory
1059982parsadox2Thousands Islands (IOI22_islands)C++17
1.75 / 100
20 ms9280 KiB
#include <bits/stdc++.h>
#include "islands.h"
#include <variant>
#define F first
#define S second
using namespace std;

const int N = 1e5 + 10 , M = 2e5 + 10;
int n , m , dis[N] , st_tim[N] , fn_tim[N] , tim;
vector <pair<int , int>> adj[N];
pair <int , int> par[N] , bh[N];
bool marked[N];

void Dfs(int v)
{
	marked[v] = true;
	st_tim[v] = tim;
	tim++;
	for(auto u : adj[v])
	{
		if(!marked[u.F])
		{
			par[u.F] = make_pair(v , u.S);
			dis[u.F] = dis[v] + 1;
			Dfs(u.F);
		}
		else if(fn_tim[u.F] == 0)
		{
			if(bh[v].F == -1 || dis[bh[v].F] < dis[u.F])
				bh[v] = u;
		}
	}
	fn_tim[v] = tim;
}

vector <int> Solve1(int v)
{
	vector <int> c;
	c.push_back(bh[v].S);
	int now = v;
	while(now != bh[v].F)
	{
		c.push_back(par[now].S);
		now = par[now].F;
	}
	reverse(c.begin() , c.end());
	vector <int> p;
	now = bh[v].F;
	while(now != 0)
	{
		p.push_back(par[now].S);
		now = par[now].F;
	}
	reverse(p.begin() , p.end());
	vector <int> res;
	return res;
}

variant<bool , vector <int>> find_journey(int nn , int mm , vector <int> U , vector <int> V)
{
	n = nn;
	m = mm;
	for(int i = 0 ; i < m ; i++)
		adj[U[i]].push_back({V[i] , i});
	for(int i = 0 ; i < n ; i++)
		bh[i] = make_pair(-1 , -1);
	if(adj[0].size() > 1)
	{
		vector <int> res;
		res.push_back(adj[0][0].S);
		res.push_back((adj[0][0].S ^ 1));
		res.push_back(adj[0][1].S);
		res.push_back((adj[0][1].S ^ 1));
		res.push_back((adj[0][0].S ^ 1));
		res.push_back(adj[0][0].S);
		res.push_back((adj[0][1].S ^ 1));
		res.push_back(adj[0][1].S);
		return res;
	}
	Dfs(0);
	bool flg = false;
	for(int i = 0 ; i < n ; i++)
	{
		if(bh[i].F > 0)
		{
			flg = true;
			auto res = Solve1(i);
			return res;
		}
	}
	if(!flg)
		return false;
}

Compilation message (stderr)

islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:93:1: warning: control reaches end of non-void function [-Wreturn-type]
   93 | }
      | ^
#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...