Cod sursă (job #154422)

Utilizator avatar warrior98 Popovici Andrei warrior98 IP ascuns
Problemă Pointeri Compilator cpp | 1,11 kb
Rundă Arhiva de probleme Status evaluat
Dată 4 sept. 2015 00:53:55 Scor 100
#include <iostream>
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <cctype>
#include <set>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <vector>
#include <list>
#include <bitset>
#include <iomanip>
#define FASTIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

ifstream fin("pointeri.in");
ofstream fout("pointeri.out");

struct {
	int st, dr;
} v[200000];
int nr, prim, ultim;

void DFS(int x);

int main() {
	int n, rad, i;

	fin >> n >> rad;

	for (i = 0; i < n; ++i)
		fin >> v[i].st;
	for (i = 0; i < n; ++i)
		fin >> v[i].dr;
	
	prim = ultim = -1;
	DFS(rad);

	fout << prim << '\n';
	for (i = 0; i < n; ++i)
		fout << v[i].st << ' ';
	fout << '\n';
	for (i = 0; i < n; ++i)
		fout << v[i].dr << ' ';

	return 0;
}

void DFS(int x) {
	if (v[x].st != -1)
		DFS(v[x].st);

	int aux = v[x].dr;
	if (prim == -1)
		prim = x;

	v[x].st = ultim;
	v[ultim].dr = x;

	v[x].dr = -1;
	ultim = x;
	if (aux != -1)
		DFS(aux);
}