Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 18:57   #1
quade1992
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 13
По умолчанию олимпиадная задача

Задача «Secret Pipes»

Фермер Джон хочет как можно дешевле организовать свою систему распределения воды, но он не хочет, чтобы его конкурент фермер Плуто мог предсказать маршруты, которые он выбирает. ФД знает, что такая задача обычно требует самого дешевого способа прокладки труб поэтому он решил использовать второй по стоимости способ.
Дан список всех двунаправленных труб, которые могут соединять множество из W(3 <= W<= 2 ООО) станций с водой (каждая из которых может быть встроена в колодец). Ваша задача — найти второй из самых дешевых способов соединить насосные станции, используя не более чем Р(Р <= 20 ООО) труб с заданной стоимостью каждой трубы. Не должно быть трубы, соединяющей станцию саму с собой. Не должно быть двух труб, соединяющих дважды одну и ту же пару станций.
Гарантируется, что есть только один самый дешевый способ распределить воду, и что существует, как минимум, два способа распределить воду. Все стоимости — положительные числа, помещающиеся в 16-битное целое. Водная станция идентифицируется своим номером — целым числом в диапазоне 1..W.
Ввод:
строка 1- два разделенных пробелом целых числа, W и Р;
строки 2..Р + 1 — каждая строка описывает одну трубу и содержит 3 числа, разделенных пробелом, — номера станций начала и конца трубы, а также стоимость этой трубы.
Пример ввода:
57
123
234
147
24 11
259
545
358
Вывод:
Одна строка, содержащая целое число — вторая минимальная стоимость конструирования системы распределения воды.
Пример вывода:
20

помогите найти ошибки в коде программы код программы:
program z1;
uses crt;

procedure InputData;
Begin
assing(input.'secret.in');reset(inp ut);
readln(N,P);
for i:=1 to P do readln(B[i],E[i],R[i]);
close(input);
end;

procedure Tree_1;
begin
Answer:=0;j:=0;
for i:=1 to N do makeset(i);
for i:=1 to P do
if (Findset(B[i]<>FindSet(E[i])) then
begin
inc(j); Key[j]:=i;
Uion(B[i],E[i]);
end;
end;

procedure Tree_2;
begin
Answer:=0;j:=0;
for i:=1 to N do Makeset(i);
for i:=1 to P do
if (FindSet(B[i])<>FindSet(E[i]))and (NotMasked[i])
tnen
begin
Answer:=Answer+R[i];
Union(B[i],E[i])
end;
end;

begin
InputData;
QuickSort(1,P);
Tree_1;
for i:=1 to P do NotMasked[i]:=true;
CurAnswer:=maxint;
for v:=1 to N-1 do
begin
NotMasked[key[v]]:=false;
Tree_2;
if Answer<CurAnswer then CurAnswer:=Answer;
NotMasked[key[v]]:=true;
end;
assign(output.'secret.out');rewrite (output)
writeln(CurAnswer);
close(output);
end.
quade1992 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Олимпиадная задача Sanek_ntsk Помощь студентам 4 09.11.2011 23:03
олимпиадная задача danzel1 Общие вопросы C/C++ 2 21.10.2011 15:15
Олимпиадная задача Alexey_kor Помощь студентам 7 30.01.2011 02:22
Олимпиадная задача. _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 1 09.12.2010 20:53
Олимпиадная задача Carbon Общие вопросы C/C++ 2 23.05.2007 22:07