Submission #1257826

#TimeUsernameProblemLanguageResultExecution timeMemory
1257826Rainmaker2627세계 지도 (IOI25_worldmap)C++20
100 / 100
26 ms2888 KiB
#include "worldmap.h"
#include<bits/stdc++.h>
using 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 u) {
    vis[u]=++cnt;
    int diag = glob_diag + 1;
    glob_diag += 3;
    fill(diag - 1, u);
    fill(diag, u);
    fill(diag + 1, u);
    int x=max(0, diag-2*n+1);
    for (int v : adj[u]) {
        if (!vis[v]) {
            dfs(v);
            fill(glob_diag++, u);
        } else if (vis[v]<vis[u]) {
            ans.at(x).at(diag-x)=v;
            ++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, 1));
    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]);
    } dfs(1);
	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...