Submission #1917439


Source Code Expand

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

inline int getint()
{
/*	static char c;
	while ((c = getchar()) < '0' || c > '9');

	int res = c - '0';
	while ((c = getchar()) >= '0' && c <= '9')
		res = res * 10 + c - '0';
	return res;*/

	int x;
	cin >> x;

	return x;
}

const int MaxN = 100000;
const int MaxNV = MaxN * 2 + 1;
const int MaxNE = MaxNV + MaxN;

int n;
int r1, r2;

int parity[MaxNV + 1];

struct halfEdge
{
	int v;
	bool used;
	halfEdge *next;
};
halfEdge adj_pool[MaxNE * 2], *adj_tail = adj_pool;
halfEdge *adj[MaxNV + 1];

inline halfEdge *oppo(const halfEdge *e)
{
	return adj_pool + ((e - adj_pool) ^ 1);
}

inline void addEdge(const int &u, const int &v)
{
	adj_tail->v = v, adj_tail->next = adj[u];
	adj[u] = adj_tail++;
}

inline void build(int &root, int d)
{
	for (int u = 1; u <= n; ++u)
	{
		int v = getint();
		if (v == -1)
			root = u + d;
		else
		{
			int p = u + d, q = v + d;
			addEdge(p, q);
			addEdge(q, p);
		}
	}
}

void dfs(const int &u, const int &fa)
{
	parity[u] = 1;
	for (halfEdge *e = adj[u]; e; e = e->next)
		if (e->v != fa)
		{
			dfs(e->v, u);
			parity[u] ^= 1;
		}
}

int tour_n = 0;
int tour[MaxNE * 2 + 1];

void euler(const int &u)
{
	halfEdge *&e = adj[u];
	while (e)
	{
		if (e->used)
			e = e->next;
		else
		{
			e->used = oppo(e)->used = true;
			euler(e->v);
		}
	}

	tour[++tour_n] = u;
}

int lab[MaxN + 1];

int main()
{
	cin >> n;
	build(r1, 0), dfs(r1, 0);
	build(r2, n), dfs(r2, 0);

	for (int u = 1; u <= n; ++u)
		if (parity[u] != parity[u + n])
		{
			puts("IMPOSSIBLE");
			return 0;
		}

	puts("POSSIBLE");

	int sv = n * 2 + 1;
	addEdge(r1, sv), addEdge(sv, r1);
	addEdge(r2, sv), addEdge(sv, r2);
	for (int u = 1; u <= n; ++u)
		if (parity[u])
		{
			addEdge(u, u + n);
			addEdge(u + n, u);
		}

	euler(sv);

	for (int u = 1; u <= n; ++u)
		if (parity[u])
			lab[u] = -1;
	for (int i = 1; i < tour_n; ++i)
	{
		int u = tour[i];
		if (u <= n && tour[i + 1] == u + n)
			lab[u] = 1;
	}

	for (int u = 1; u <= n; ++u)
		printf("%d ", lab[u]);
	puts("");

	return 0;
}

Submission Info

Submission Time
Task F - Two Trees
User InvUsr
Language C++14 (GCC 5.4.1)
Score 1700
Code Size 2255 Byte
Status AC
Exec Time 133 ms
Memory 23808 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1700 / 1700
Status
AC × 3
AC × 70
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_47.txt, subtask_1_48.txt, subtask_1_49.txt, subtask_1_50.txt, subtask_1_51.txt, subtask_1_52.txt, subtask_1_53.txt, subtask_1_54.txt, subtask_1_55.txt, subtask_1_56.txt, subtask_1_57.txt, subtask_1_58.txt, subtask_1_59.txt, subtask_1_60.txt, subtask_1_61.txt, subtask_1_62.txt, subtask_1_63.txt, subtask_1_64.txt
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 6400 KiB
sample_02.txt AC 2 ms 6400 KiB
sample_03.txt AC 2 ms 6400 KiB
subtask_1_01.txt AC 2 ms 6400 KiB
subtask_1_02.txt AC 2 ms 6400 KiB
subtask_1_03.txt AC 48 ms 8448 KiB
subtask_1_04.txt AC 81 ms 20096 KiB
subtask_1_05.txt AC 71 ms 10624 KiB
subtask_1_06.txt AC 27 ms 11008 KiB
subtask_1_07.txt AC 66 ms 11648 KiB
subtask_1_08.txt AC 41 ms 8448 KiB
subtask_1_09.txt AC 46 ms 8448 KiB
subtask_1_10.txt AC 70 ms 17280 KiB
subtask_1_11.txt AC 17 ms 6400 KiB
subtask_1_12.txt AC 96 ms 21632 KiB
subtask_1_13.txt AC 57 ms 10496 KiB
subtask_1_14.txt AC 14 ms 7680 KiB
subtask_1_15.txt AC 28 ms 8960 KiB
subtask_1_16.txt AC 61 ms 10496 KiB
subtask_1_17.txt AC 37 ms 8448 KiB
subtask_1_18.txt AC 98 ms 22272 KiB
subtask_1_19.txt AC 79 ms 12672 KiB
subtask_1_20.txt AC 108 ms 23168 KiB
subtask_1_21.txt AC 80 ms 14592 KiB
subtask_1_22.txt AC 83 ms 14592 KiB
subtask_1_23.txt AC 111 ms 23040 KiB
subtask_1_24.txt AC 102 ms 14336 KiB
subtask_1_25.txt AC 76 ms 12672 KiB
subtask_1_26.txt AC 80 ms 12672 KiB
subtask_1_27.txt AC 113 ms 23296 KiB
subtask_1_28.txt AC 80 ms 12672 KiB
subtask_1_29.txt AC 110 ms 23040 KiB
subtask_1_30.txt AC 81 ms 13824 KiB
subtask_1_31.txt AC 86 ms 15360 KiB
subtask_1_32.txt AC 117 ms 23040 KiB
subtask_1_33.txt AC 104 ms 14336 KiB
subtask_1_34.txt AC 76 ms 12800 KiB
subtask_1_35.txt AC 80 ms 12672 KiB
subtask_1_36.txt AC 115 ms 23296 KiB
subtask_1_37.txt AC 118 ms 23168 KiB
subtask_1_38.txt AC 115 ms 23168 KiB
subtask_1_39.txt AC 115 ms 23168 KiB
subtask_1_40.txt AC 120 ms 23040 KiB
subtask_1_41.txt AC 126 ms 22784 KiB
subtask_1_42.txt AC 93 ms 23808 KiB
subtask_1_43.txt AC 129 ms 23296 KiB
subtask_1_44.txt AC 132 ms 23168 KiB
subtask_1_45.txt AC 119 ms 23168 KiB
subtask_1_46.txt AC 133 ms 23168 KiB
subtask_1_47.txt AC 128 ms 23040 KiB
subtask_1_48.txt AC 132 ms 22784 KiB
subtask_1_49.txt AC 92 ms 23808 KiB
subtask_1_50.txt AC 125 ms 23296 KiB
subtask_1_51.txt AC 119 ms 23168 KiB
subtask_1_52.txt AC 115 ms 23168 KiB
subtask_1_53.txt AC 116 ms 23168 KiB
subtask_1_54.txt AC 108 ms 23040 KiB
subtask_1_55.txt AC 109 ms 22912 KiB
subtask_1_56.txt AC 92 ms 23808 KiB
subtask_1_57.txt AC 106 ms 23296 KiB
subtask_1_58.txt AC 112 ms 23168 KiB
subtask_1_59.txt AC 108 ms 23168 KiB
subtask_1_60.txt AC 112 ms 23168 KiB
subtask_1_61.txt AC 109 ms 23168 KiB
subtask_1_62.txt AC 108 ms 22528 KiB
subtask_1_63.txt AC 92 ms 23808 KiB
subtask_1_64.txt AC 106 ms 23296 KiB