Submission #1251770

#TimeUsernameProblemLanguageResultExecution timeMemory
1251770coding_snorlaxWorld Map (IOI25_worldmap)C++20
58 / 100
175 ms20040 KiB
//#include "worldmap.h" #include<bits/stdc++.h> using namespace std; struct Graph { int n; // 節點數 int m_cap; // 最多能存的「有向邊」數 (無向圖要給 2*M) vector<int> head; // head[u] = 第一條出邊的 idx,-1 代表空 vector<int> to, nxt; // forward-star int idx; // 當前可用邊索引 vector<char> vis; // 拜訪標記 (0/1) vector<int> dfs_path; // Euler 路徑 /* 建構子:n 節點,m_cap = 2*M (若無向) 或 M (若有向) */ Graph(int _n, int _max_edges) : n(_n), m_cap(_max_edges), head(_n + 1, -1), to(_max_edges), nxt(_max_edges), idx(0), vis(_n + 1, 0) {} /* 在鄰接串列前插入 (u→v) */ void add_directed(int u, int v) { to[idx] = v; nxt[idx] = head[u]; head[u] = idx; ++idx; } /* 無向圖:各插一次 */ void add_edge(int u, int v) { add_directed(u, v); add_directed(v, u); } /* DFS(Euler 路徑:進入 push,回溯再 push 原點) */ void dfs(int u) { vis[u] = 1; dfs_path.push_back(u); for (int e = head[u]; e != -1; e = nxt[e]) { int v = to[e]; if (!vis[v]) { dfs(v); dfs_path.push_back(u); // 回溯 } } } /* 取得 DFS Euler 路徑;未連通也能處理 */ vector<int> get_dfs_path(int root = 1) { fill(vis.begin(), vis.end(), 0); dfs_path.clear(); dfs(root); for (int u = 1; u <= n; ++u) // 若圖有多連通塊 if (!vis[u]) dfs(u); // 依序補 DFS return dfs_path; } /* 回傳 u 的鄰居 (複製一份 vector) */ vector<int> get_neighbors(int u) const { vector<int> nbrs; for (int e = head[u]; e != -1; e = nxt[e]) nbrs.push_back(to[e]); return nbrs; } }; vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) { Graph g(N,2*M); for(int i=0;i<M;i++){ g.add_edge(A[i],B[i]); } auto path = g.get_dfs_path(1); vector<vector<int>> ans(6*N-3, vector<int>(6*N-3, 1)); for(int i=0;i<2*N-1;i++){ for(int j=0;j<6*N-3;j++){ ans[3*i][j] = path[i]; } auto ed = g.get_neighbors(path[i]); int ct = 0; for(int j:ed){ ans[3*i+1][ct] = j; ans[3*i+1][ct+1] = path[i]; ct+=2; } for(int j=ct;j<6*N-3;j++) ans[3*i+1][j] = path[i]; for(int j=0;j<6*N-3;j++) ans[3*i+2][j] = path[i]; } 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...