QOJ.ac

QOJ

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

#7591. Ổ cắm kéo dài

Statistics

Allison có rất nhiều thiết bị điện tử như iMac, iPod, iPhone và iPad. Vì vậy, cô định mua các ổ cắm kéo dài để sạc chúng. Sau nhiều lần tìm hiểu trên mạng, Allison phát hiện một mẫu ổ cắm mang nhãn hiệu 天翼 vừa đẹp vừa tinh xảo (như hình bên trái phía dưới). Ngay từ cái nhìn đầu tiên, cô đã bị kiểu dáng đẹp mắt của nó thu hút và mua một lúc $n$ ổ cắm cùng mẫu này.

problem_7591_8b974896e0f1e2a4771025fe74778b83.png
problem_7591_2fb72166e1a07154028ca9492dd9b505.png

Nhưng vấn đề cũng xuất hiện: nhà Allison chỉ có một ổ điện trên tường, nên cô phải nối các ổ cắm kéo dài để dẫn điện qua từng tầng (như hình bên phải phía trên).

Các ổ cắm được nối thành cấu trúc cây: phích cắm của mỗi ổ được cắm vào một ổ khác (trừ nút gốc), và không được tạo thành chu trình.

Mỗi ổ cắm có ba dây: dây pha, dây trung tính và dây tiếp đất. Khi số ổ cắm tăng lên và dây dẫn bị hao mòn, điện trở do tiếp xúc giữa các dây trong mạch đã trở nên đáng kể.

Làm thế nào để mô tả cấu trúc cây của các ổ cắm và quan hệ điện trở giữa các dây? Allison nghĩ ra một mô hình toán học: dùng $a_i$ làm số hiệu của ổ cắm thứ $i$, $f_i$ là ổ mà phích cắm của ổ thứ $i$ được cắm vào (tức cha của $a_i$ trên cây); $1$ là dây pha, $2$ là dây trung tính, $3$ là dây tiếp đất. Điện trở của mạch được mô tả bằng $R(a_i,f_i,x,y)$ ($x,y\in\{1,2,3\}$), là điện trở giữa dây $x$ của $a_i$ và dây $y$ của $f_i$. Trong mô hình này, Allison cho rằng dây pha và dây trung tính cũng có thể được nối với nhau và tạo ra điện trở. Dưới đây là một ví dụ:

problem_7591_ddbeb8727c0723b5f0d4a1f3028cbb9a.png

Theo thời gian, điện trở giữa các dây cũng có thể thay đổi. Allison muốn biết điện trở hiện tại giữa dây $x$ của ổ cắm $a_i$ và dây $y$ của ổ cắm $a_j$ trong mạch dạng cây này. Quy ước nút gốc không cắm vào ổ cắm nào khác và có số hiệu $1$.

Dữ liệu vào

Dòng đầu tiên của tệp circuit.in chứa số nguyên dương $n$, là số ổ cắm.

Tiếp theo là $4(n-1)$ dòng, cứ bốn dòng tạo thành một khối.

Dòng đầu tiên của khối thứ $i$ chứa số nguyên $f_i$, cho biết cha của ổ cắm số $i+1$ là ổ cắm $f_i$.

Sau đó là ma trận $g_{xy}$ kích thước $3\times3$. Phần tử ở dòng $x$, cột $y$ là nghịch đảo của điện trở giữa dây $x$ của ổ cắm số $i+1$ và dây $y$ của $f_i$.

Tiếp theo là số nguyên $q$, cho biết có $q$ thao tác.

Tiếp theo là $q$ dòng, mỗi dòng chứa một số số nguyên.

Số nguyên đầu tiên là $k$. Nếu $k=1$, tiếp theo có bốn số nguyên $a_i,x_i,x_j,g$, nghĩa là đổi điện trở giữa dây $x_i$ của ổ cắm $a_i$ và dây $x_j$ của cha $f_i$ của nó thành nghịch đảo của $g$. Bảo đảm $2\le a_i\le n$.

Nếu $k=2$, tiếp theo có bốn số nguyên $a_i,x_i,a_j,x_j$, yêu cầu hỏi điện trở giữa dây $x_i$ của ổ cắm $a_i$ và dây $x_j$ của ổ cắm $a_j$. Bảo đảm $a_i\ne a_j$.

Dữ liệu ra

Tệp dữ liệu ra là circuit.out.

Với mỗi truy vấn, in một dòng chứa số thực biểu diễn điện trở giữa hai dây.

Nếu $\left|\frac{\text{kết quả của thí sinh}-\text{kết quả chuẩn}}{\text{kết quả chuẩn}}\right|<10^{-3}$ thì giá trị điện trở được coi là đúng. Nếu mọi giá trị điện trở đều đúng, bạn nhận được điểm của bộ kiểm thử đó.

Ví dụ

Dữ liệu vào 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

Dữ liệu ra 1

0.083836
0.095256
0.078828
0.146900

Ví dụ 2

Xem các tệp circuit/circuit.in và circuit/circuit.ans trong thư mục của thí sinh.

Giới hạn

Với tất cả dữ liệu kiểm thử, đầu vào được bảo đảm là một cây. Nghịch đảo của mọi điện trở trong đầu vào lớn hơn $0$ và không vượt quá $10$.

Số hiệu bộ kiểm thử Đặc điểm
$1$–$6$ $n\le100,q\le1000$; chỉ có truy vấn, không có cập nhật
$7$–$10$ $n\le1000,q\le1000$; dữ liệu là một đường đi
$11$–$16$ $n\le10000,q\le10000$; chiều cao cây không vượt quá $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.