제출 #1293617

#제출 시각아이디문제언어결과실행 시간메모리
1293617dimitri.shengelia세계 지도 (IOI25_worldmap)C++20
30 / 100
15 ms3284 KiB
#include "worldmap.h" #include <bits/stdc++.h> //#include <cassert> //#include <cstdio> using namespace std; vector < vector <int> > adj; vector <bool> visited; vector <int> v; void dfs ( int u ) { visited[u] = true; for ( auto x : adj[u] ) { if ( visited[x] == false ) { v.push_back( x + 1 ); dfs( x ); v.push_back( u + 1 ); } } return; } vector < vector<int> > create_map ( int n, int m, vector <int> a, vector <int> b ) { vector < vector <int> > answer; adj.resize( n ); visited.resize( n ); for ( int i = 0; i < n; i++ ) { adj[i].clear(); visited[i] = false; } for ( int i = 0; i < m; i++ ) { a[i]--; b[i]--; adj[a[i]].push_back( b[i] ); adj[b[i]].push_back( a[i] ); } if ( adj[0].size() == n - 1 ) { answer.resize( 2 * n, vector <int> ( 2 * n, 1 ) ); int k = 0; for ( int i = 0; i < 2 * n; i += 2 ) { for ( int j = 0; j + 1 < 2 * n; j += 3 ) { if ( k == m ) { break; } answer[j][i] = a[k] + 1; answer[j + 1][i] = b[k] + 1; k++; } } } else { v.clear(); v.push_back( 1 ); dfs( 0 ); for ( int i = 0; i < v.size(); i++ ) { answer.push_back( v ); } } return answer; } /*int main() { int T; assert(1 == scanf("%d", &T)); std::vector<int> Nt(T), Mt(T); std::vector<std::pair<std::vector<int>, std::vector<int>>> AB; for (int t = 0; t < T; ++t) { assert(2 == scanf("%d %d", &Nt[t], &Mt[t])); int M = Mt[t]; std::vector<int> A(M), B(M); for (int i = 0; i < Mt[t]; i++) { assert(2 == scanf("%d %d", &A[i], &B[i])); } AB.push_back(make_pair(A, B)); } fclose(stdin); std::vector<std::vector<std::vector<int>>> Ct; for (int t = 0; t < T; t++) { int N = Nt[t], M = Mt[t]; std::vector<int> A = AB[t].first, B = AB[t].second; auto C = create_map(N, M, A, B); Ct.push_back(C); } for (int t = 0; t < T; t++) { auto& C = Ct[t]; int P = (int)C.size(); std::vector<int> Q(P); for (int i = 0; i < P; ++i) Q[i] = (int)C[i].size(); printf("%d\n", P); for (int i = 0; i < P; ++i) printf("%d%c", Q[i], " \n"[i + 1 == P]); printf("\n"); for (int i = 0; i < P; i++) { for (int j = 0; j < Q[i]; j++) { printf("%d%c", C[i][j], " \n"[j + 1 == Q[i]]); } } if (t < T - 1) printf("\n"); } fclose(stdout); return 0; }*/
#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...