Submission #1234441

#TimeUsernameProblemLanguageResultExecution timeMemory
1234441nicolo_010Thousands Islands (IOI22_islands)C++20
5 / 100
69 ms12872 KiB
#include <bits/stdc++.h>
#include "islands.h"
using namespace std;
template <typename T>
using v = vector<T>;
using pii = pair<int, int>;
using ll = long long;
#define rep(i, k, n) for (int i = k; i < n; i++)

v<int> anterior;
v<v<int>> adj;
v<int> vis;
v<int> cycle;
int beg;

void dfs(int n, int p=-1) {
	if (beg != -1) return;
	//cout << n << endl;
	vis[n] = 1;
	anterior[n] = p;
	for (auto x : adj[n]) {
		if (beg != -1) return;
		//cout << x << " " << beg << " " << vis[x] << endl;
		if (vis[x] == 1) {
			cycle.clear();
			int u = n;
			beg = x;
			while (anterior[u] != -1) {
				cycle.push_back(u);
				u = anterior[u];
			}
			cycle.push_back(u);
			reverse(cycle.begin(), cycle.end());
			//check validity
			int idx;
			rep(i, 0, (int)cycle.size()) {
				if (cycle[i] == beg) {
					idx = i;
					break;
				}
			}
			
			return;
		}
		if (!vis[x]) {
			dfs(x, n);
		}
	}
	vis[n] = 2;
}

std::variant<bool, v<int>> find_journey(int N, int M, v<int> U, v<int> V) {
	if (N == 2) return false;
	map<pii, int> mp;
	rep(i, 0, M) {
		mp[{U[i], V[i]}] = i;
	}
	return v<int> {mp[{0, 1}], mp[{1, 0}], mp[{0, 2}], mp[{2, 0}], mp[{1, 0}], mp[{0, 1}], mp[{2, 0}], mp[{0, 2}]};
}
#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...