QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100

#7591. Удлинители

Statistics

У Allison очень много электронных устройств, например iMac, iPod, iPhone и iPad. Поэтому она решила купить удлинители с несколькими розетками, чтобы заряжать свои устройства. После долгих поисков в интернете Allison нашла красивый и изящный удлинитель марки Tianyi (на рисунке внизу слева). Его изящная форма привлекла её с первого взгляда, и она сразу купила $n$ удлинителей этой модели.

problem_7591_a4d0467265a00f03fbc12ddd7b72ac68.png

Но возникла проблема: дома у Allison всего одна розетка, поэтому ей приходится соединять удлинители друг с другом, чтобы передавать электричество от одного уровня к следующему (как показано на рисунке вверху справа).

Соединения удлинителей образуют дерево: вилка каждого удлинителя, кроме корневого, вставлена в розетку другого удлинителя. Циклы в соединениях запрещены.

У каждого удлинителя три проводника: фазный, нулевой и заземляющий. По мере увеличения числа удлинителей и износа проводников сопротивлением в местах контакта проводников уже нельзя пренебрегать.

Как описать дерево удлинителей и сопротивления между проводниками? Allison придумала математическую модель. Пусть $a_i$ — номер $i$-го удлинителя, а $f_i$ — удлинитель, в который вставлена его вилка (то есть родитель $a_i$ в дереве). Числа $1$, $2$ и $3$ обозначают соответственно фазный, нулевой и заземляющий проводники. Тогда сопротивления во всей цепи можно описать величинами $R(a_i,f_i,x,y)$, где $x,y\in\{1,2,3\}$. Эта величина обозначает сопротивление между проводником $x$ удлинителя $a_i$ и проводником $y$ удлинителя $f_i$. В этой математической модели Allison допускает, что фазный и нулевой проводники тоже могут быть соединены и создавать сопротивление. Ниже приведён пример:

problem_7591_8c26657b1af921929254aa9efe361923.png

С течением времени сопротивления между проводниками могут меняться. Теперь Allison хочет узнать текущее сопротивление между проводником $x$ удлинителя $a_i$ и проводником $y$ удлинителя $a_j$ в этой древовидной цепи. Корневой удлинитель не подключён к другим удлинителям и имеет номер $1$.

Входные данные

Первая строка входного файла circuit.in содержит положительное целое число $n$ — количество удлинителей.

Следующие $4(n-1)$ строк разбиты на блоки по $4$ строки.

Первая строка $i$-го блока содержит целое число $f_i$: родителем удлинителя с номером $i+1$ является удлинитель $f_i$.

Далее следует матрица $g_{xy}$ размера $3\times3$. Элемент в строке $x$ и столбце $y$ равен обратной величине сопротивления между проводником $x$ удлинителя с номером $i+1$ и проводником $y$ удлинителя $f_i$.

Далее дано целое число $q$ — количество операций.

Следующие $q$ строк содержат по несколько целых чисел.

Первое число — $k$. Если $k=1$, далее следуют четыре целых числа $a_i,x_i,x_j,g$: сопротивление между проводником $x_i$ удлинителя $a_i$ и проводником $x_j$ его родителя $f_i$ нужно заменить на величину, обратную $g$. Гарантируется, что $2\le a_i\le n$.

Если $k=2$, далее следуют четыре целых числа $a_i,x_i,a_j,x_j$: требуется найти сопротивление между проводником $x_i$ удлинителя $a_i$ и проводником $x_j$ удлинителя $a_j$. Гарантируется, что $a_i\ne a_j$.

Выходные данные

Выходной файл — circuit.out.

Для каждого запроса выведите в отдельной строке вещественное число — сопротивление между двумя проводниками.

Значение сопротивления считается верным, если

$$\left|\frac{\text{ответ участника}-\text{эталонный ответ}}{\text{эталонный ответ}}\right|<10^{-3}.$$

Если верны все значения сопротивлений, участник получает баллы за этот тест.

Примеры

Входные данные 1

3
1
6 7 1
4 1 8
8 3 3
2
7 5 8
10 5 7
10 5 5
10
1 3 1 2 2
1 2 2 3 5
2 3 2 2 2
1 2 3 2 5
1 3 1 2 3
2 1 2 2 3
1 3 2 1 2
2 2 1 1 1
1 2 1 2 5
2 3 1 1 2

Выходные данные 1

0.083836
0.095256
0.078828
0.146900

Пример 2

См. файлы circuit/circuit.in и circuit/circuit.ans в каталоге участника.

Ограничения

Во всех тестах входные данные гарантированно задают дерево. Для всех входных сопротивлений выполняется $0<\text{обратная величина сопротивления}\le10$.

Номера тестов Особенности
$1$–$6$ $n\le100$, $q\le1000$; гарантируется, что есть только запросы, без изменений.
$7$–$10$ $n\le1000$, $q\le1000$; гарантируется, что дерево является цепью.
$11$–$16$ $n\le10000$, $q\le10000$; гарантируется, что высота дерева не превышает $30$.
$17$–$20$ $n\le10000$, $q\le10000$.

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.