제출 #1253316

#제출 시각아이디문제언어결과실행 시간메모리
1253316Gabp세계 지도 (IOI25_worldmap)C++20
72 / 100
89 ms8260 KiB
#include<bits/stdc++.h>
using namespace std;

vector<vector<int>> create_map(int n, int m, vector<int> a, vector<int> b) {
  if (n == 1) {
    return {{1}};
  }
  
  vector<vector<int>> g(n);
  vector<vector<bool>> done(n, vector<bool>(n, true));
  for (int i = 0; i < m; i++) {
    a[i]--; b[i]--;
    g[a[i]].push_back(b[i]);
    g[b[i]].push_back(a[i]);
    done[a[i]][b[i]] = done[b[i]][a[i]] = false;
  }
  vector<bool> vis(n, false);
  
  vector<int> order;
  auto dfs = [&](auto self, int root) -> void {
    vis[root] = true;
    order.push_back(root);
    
    for (auto v: g[root]) {
      if (vis[v]) continue;
      self(self, v);
      done[root][v] = done[v][root] = true;
      order.push_back(root);
    }
  };
  dfs(dfs, 0);
  
  int k = order.size();
  vector<vector<int>> ans;
  for (int i = 0; i < order.size(); i++) {
    bool need = false;
    int id = order[i];
    for (auto v: g[id]) {
      if (!done[v][id]) need = true;
    }
    
    if (need) {
      if (i) ans.push_back(vector<int>(1, id));
      ans.push_back(vector<int>());
      for (auto v: g[id]) {
        if (done[v][id]) continue;
        if (!ans.back().empty()) ans.back().push_back(id);
        ans.back().push_back(v);
        done[v][id] = done[id][v] = true;
      }
      k = max(k, (int)ans.back().size());
    }
    
    if (i + 1 < order.size()) {
      ans.push_back(vector<int>(1, id));
    }
  }
  k = max(k, (int)ans.size());
  
  if (ans.size() < k) {
    int id;
    if (ans.back().size() == 1) id = ans.back()[0];
    else id = ans.back()[1];
    while (ans.size() < k) {
      ans.push_back(vector<int>(k, id));
    }
  }
  
  for (int i = 0; i < k; i++) {
    int id;
    if (ans[i].size() == 1) id = ans[i][0];
    else id = ans[i][1];
    while (ans[i].size() < k) ans[i].push_back(id);
    for (int j = 0; j < k; j++) ans[i][j]++;
  }
  
  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...