gnastasiya5
07.11.2021 21:36

Оптимальный рабочий ограничение по времени на тест 2 секунды Система иерархии в компании Михаила представляет собой дерево, где у каждого из n сотрудников, кроме самого Михаила, есть непосредственный начальник (и наоборот, у Михаила есть несколько прямых подчиненных, у некоторых из них есть свои подчиненные, и так далее). К сожалению, у Михаила скопилось много рутинной работы, которую могут выполнить только рядовые сотрудники (то есть те, у которых нет ни одного подчиненного), но чтобы передать задание сотруднику, Михаил должен попросить передать это задание каждого другого сотрудника на пути между ними. Про каждого сотрудника известно число ci — сколько ему надо заплатить, чтобы задание было передано дальше и было в конечном итоге выполнено Михаилу выбрать рядового сотрудника так, чтобы заплатить за передачу и выполнение суммарно как можно меньше. Входные данные В первой строке ввода задано число n — количество сотрудников в компании (1⩽n⩽10е5). В следующей строке через пробел перечислены номера начальников: на i-м месте стоит номер непосредственного начальника i-го сотрудника. Число 0 означает, что это Михаил, и у него начальника нет. В третьей строке так же перечислены ci — сколько придется заплатить i-му сотруднику за передачу или выполнения задания (0⩽ci⩽10е9). Гарантируется, что себе Михаил ничего платить не должен. Выходные данные Выведите единственное число — минимальное суммарное число денег, с которым Михаилу придется расстаться. Пример входные данные
7
0 1 1 2 2 3 3
0 10 11 5 6 1 2
выходные данные
12
Можете написать идею алгоритма или код (желательно на плюсах)

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Alekseimiller
12.02.2021 06:37
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
const
  m = 10;

var
  t: array[1..m] of integer;
  i, n, nm, sm: integer;

begin
  //Заполняем массив сл.числами и подсчитываем
  //количество элементов и среднее арифметическое
  //согласно условию задачи
  for i := 1 to m do
  begin
    t[i] := random(-20, 20);write(t[i]:4);
    if (i > 1) and (i <= m) then
      if t[i] > t[i - 1] then n := n + 1
      else if t[i] < t[i - 1] then begin
        sm := sm + t[i];nm := nm + 1;
      end;
  end;
  writeln;
  writeln('число элементов больших предыдущего = ', n);
  writeln('ср. арифметическое элементов меньших предыдущего = ', sm / nm);  
 
end.

Тестовое решение:
    6  13  19   8 -19 -11 -20 -15 -19 -13
число элементов, больших предыдущего = 5
среднее арифметическое элементов, меньших предыдущего = -12.5
0,0(0 оценок)
Ответ:
shcoll15
12.10.2020 14:05
// PascalABC.NET 3.1, сборка 1218 от 12.04.2016
begin
  var m,n:integer;
  Write('Количество строк и столбцов матрицы: ');
  Read(n,m);
  var a:=MatrixRandom(n,m,10,99);
  for var i:=0 to n-1 do begin
    for var j:=0 to m-1 do Print(a[i,j]);
    Writeln
    end;
  var p:=ReadInteger('Введите число Р:');
  var b:array of integer;
  SetLength(b,4*m);
  var k:=0;
  for var i:=n-p to n-1 do
    for var j:=0 to m-1 do
      if a[i,j] mod 4=0 then begin
        b[k]:=a[i,j]; Inc(k)
        end;
  SetLength(b,k);
  b.Print
end.

Тестовое решение:
Количество строк и столбцов матрицы: 6 8
67 70 68 72 38 72 96 38
49 75 24 55 72 63 21 40
72 12 60 22 74 30 13 45
22 45 39 24 35 97 64 31
76 62 15 94 56 28 31 13
41 67 75 37 67 13 25 20
Введите число Р: 4
72 12 60 24 64 76 56 28 20
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота