Submission #1252566

#TimeUsernameProblemLanguageResultExecution timeMemory
1252566Clan328World Map (IOI25_worldmap)C++20
86 / 100
42 ms5592 KiB
#include "worldmap.h"
#include <bits/stdc++.h>

using namespace std;

#define pb push_back

vector<vector<int>> G;
vector<int> order, visited;

void dfs(int v) {
  order.pb(v);
  visited[v] = true;
  for (auto u : G[v]) {
    if (visited[u]) continue;
    dfs(u);
    order.pb(v);
  }
}

std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
  G = vector<vector<int>>(N);
  for (int i = 0; i < M; i++) {
    G[A[i]-1].push_back(B[i]-1);
    G[B[i]-1].push_back(A[i]-1);
  }

  order = vector<int>();
  visited = vector<int>(N);
  dfs(0);

  std::vector<std::vector<int>> ans(2*N + order.size() - N, std::vector<int>(2*N + order.size() - N, 1));

  visited = vector<int>(N);
  int idx = 0;
  for (int j = 0; j < order.size(); j++) {
    int x = order[j];

    if (visited[x]) {
      if (ans[idx-1][0] == order[j-1]+1) {
        for (int i = 0; i < ans.size(); i++) {
          if (i % 2 == 0)
            ans[idx][i] = x+1;
          else
            ans[idx][i] = order[j-1]+1;
        }
      } else {
        for (int i = 0; i < ans.size(); i++) {
          if (i % 2 == 1)
            ans[idx][i] = x+1;
          else
            ans[idx][i] = order[j-1]+1;
        }
      }
      // for (int i = 0; i < ans.size(); i++) {
      //   if (ans[idx-1][i] == order[j-1]+1)
      //     ans[idx][i] = x+1;
      //   else
      //     ans[idx][i] = order[j-1]+1;
      // }
      idx++;
      continue;
    }

    visited[x] = true;

    for (int i = 0; i < ans.size(); i++) {
      ans[idx][i] = x+1;
      ans[idx+1][i] = x+1;
    }

    if (j != 0) {
      if (ans[idx-1][0] != order[j-1]+1) {
        for (int i = 0; i < ans.size(); i+=2) {
          ans[idx][i] = order[j-1]+1;
        }
      } else {
        for (int i = 1; i < ans.size(); i+=2) {
          ans[idx][i] = order[j-1]+1;
        }
      }
      // for (int i = 0; i < ans.size(); i++) {
      //   if (ans[idx-1][i] != order[j-1]+1)
      //     ans[idx][i] = order[j-1]+1;
      // }
    }

    if (ans[idx][0] != order[j-1]+1) {
      int curr = 0;
      for (auto u : G[x]) {
        ans[idx+1][curr] = u+1;
        curr += 2;
      }
    } else {
      int curr = 1;
      for (auto u : G[x]) {
        ans[idx+1][curr] = u+1;
        curr += 2;
      }
    }

    // int curr = 0;
    // for (auto u : G[x]) {
    //   if (ans[idx][curr] != order[j-1]+1) {
    //     ans[idx+1][curr] = u+1;
    //     ans[idx+1][curr+1] = x+1;
    //   } else {
    //     ans[idx+1][curr+1] = u+1;
    //     ans[idx+1][curr] = x+1;
    //   }
    //   curr += 2;
    // }

    idx += 2;
  }

  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...