Submission #1257825

#TimeUsernameProblemLanguageResultExecution timeMemory
1257825Rainmaker2627World Map (IOI25_worldmap)C++20
14 / 100
3 ms584 KiB
#include "worldmap.h"

#include<bits/stdc++.h>
using namespace std;

namespace std {

template <class Fun> class y_combinator_result {
	Fun fun_;

  public:
	template <class T>
	explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {}

	template <class... Args> decltype(auto) operator()(Args &&...args) {
		return fun_(std::ref(*this), std::forward<Args>(args)...);
	}
};

template <class Fun> decltype(auto) y_combinator(Fun &&fun) {
	return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}

}  // namespace std

int n, cnt=0, glob_diag=0;
vector<int> vis;
vector<vector<int>> ans, adj;
void fill(int d, int v) {
    for (int x = 0; x < 2*n; x++) {
        if (0<=d-x && d-x<2*n) ans[x][d-x]=v;
    }
}

void dfs(int v) {
    vis.at(v) = ++cnt;
    int diag = glob_diag + 1;
    glob_diag += 3;
    fill(diag - 1, v);
    fill(diag, v);
    fill(diag + 1, v);
    int x = max(0, diag - 2 * n + 1);
    for (int w : adj.at(v)) {
        if (!vis.at(w)) {
            dfs(w);
            fill(glob_diag, v);
            ++glob_diag;
        } else if (vis.at(w) < vis.at(v)) {
            ans.at(x).at(diag - x) = w;
            ++x;
        }
    }   
}

vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) {
    n=N; cnt=0; glob_diag=0;
    ans.assign(2*N, vector<int>(2*N, 0));
    adj.assign(N+1, vector<int>());
    vis.assign(N+1, 0);
    for (int i = 0; i < M; ++i) {
        adj[A[i]].push_back(B[i]);
        adj[B[i]].push_back(A[i]);
    }

    if (N>=30) return ans;

	dfs(1);
	while (glob_diag < 4 * N) {
		fill(glob_diag, 1);
		++glob_diag;
	}

	return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...