Submission #1293540

#TimeUsernameProblemLanguageResultExecution timeMemory
1293540dimitri.shengeliaWorld Map (IOI25_worldmap)C++20
15 / 100
14 ms3280 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 bfs ( int u ) {

	visited[u] = true;

	for ( auto x : adj[u] ) {

		if ( visited[x] == false ) {

			v.push_back( x + 1 );

			bfs( 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 ( m == n - 1 ) {

		v.clear();

		v.push_back( 1 );

		bfs( 0 );

		for ( int i = 0; i < v.size(); i++ ) {

			answer.push_back( v );

		}

	} else if ( m == n * ( n - 1 ) / 2 ) {

		answer.resize( n );

		for ( int i = 0; i < 2 * n; i++ ) {

			int k = i % n;

			for ( int j = 0; j < n; j++ ) {

				answer[i].push_back( k + 1 );
				answer[i].push_back( j + 1 );

			}

		}

	}

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