Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <list>
using namespace std;
void beolvas();
void kiir();
bool szinez(int);
int n;
int* parent;
int* child_count;
list<int>* child;
bool* szin;
int szin_count=0;
int main()
{
beolvas();
szinez(1);
kiir();
}
bool szinez(int num)
{
if(child_count[num] == 0)
{
szin[num] = false;
return false;
}
bool sz = false;
list<int>::iterator it;
for (it=child[num].begin() ; it != child[num].end(); it++)
if(!szinez(*it))
sz = true;
szin[num]=sz;
if(sz)
szin_count++;
return sz;
}
void beolvas()
{
FILE* reader = fopen("kepzes.be", "r");
fscanf(reader, "%d", &n);
parent = new int[n+1];
child_count = new int[n+1];
fill(child_count, child_count+n+1, 0);
child = new list<int>[n+1];
szin = new bool[n+1];
fill(szin, szin+n+1, false);
int tmp;
for(int i=1; i<=n; i++)
{
fscanf(reader, "%d", &tmp);
parent[i] = tmp;
child_count[tmp]++;
child[tmp].push_back(i);
}
fclose(reader);
}
void kiir()
{
FILE* printer = fopen("kepzes.ki", "w");
fprintf(printer, "%d\r\n", szin_count);
for(int i=1; i<=n; i++)
if(szin[i])
fprintf(printer, "%d ", i);
fclose(printer);
}