QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 2048 MB

#22850. Schiebepuzzle auf einem Baum

Statistics

Gegeben ist ein Baum mit $N$ Knoten, die von $1$ bis $N$ nummeriert sind. Die $i$-te Kante des Baums verbindet die Knoten $u_i$ und $v_i$. Zu Beginn enthält für jedes $i$ ($1 \le i \le N$) der Knoten $i$ genau einen Stein, falls $A_i = 1$ gilt, und keinen Stein, falls $A_i = 0$ gilt.

Du kannst die folgende Operation wiederholt ausführen:

  • Wähle eine noch nicht gewählte Kante, bei der sich auf genau einem ihrer Endpunkte ein Stein befindet, und bewege diesen Stein zum anderen Endpunkt.

Bestimme, ob du diese Operation genau $N - 1$ Mal ausführen kannst. Falls dies möglich ist, gib die Reihenfolge aus, in der die Kanten gewählt werden.

Eingabe

Die Eingabe enthält einen oder mehrere Testfälle. Die erste Zeile der Eingabe enthält eine ganze Zahl $T$ ($1 \le T \le 10^5$), die Anzahl der Testfälle. Es folgen die Beschreibungen der $T$ Testfälle, jeweils im folgenden Format.

$$ \begin{aligned} &N \\ &u_1 \ v_1 \\ &u_2 \ v_2 \\ &\vdots \\ &u_{N-1} \ v_{N-1} \\ &A_1 \ A_2 \ \ldots \ A_N \end{aligned} $$

Die erste Zeile enthält eine ganze Zahl $N$ ($2 \le N \le 2 \times 10^5$), die Anzahl der Knoten.

Für jedes $i$ ($1 \le i \le N - 1$) enthält die $i$-te der folgenden $N - 1$ Zeilen zwei durch ein Leerzeichen getrennte ganze Zahlen $u_i$ und $v_i$ ($1 \le u_i, v_i \le N$), was bedeutet, dass die $i$-te Kante die Knoten $u_i$ und $v_i$ verbindet. Es wird garantiert, dass der gegebene Graph ein Baum ist.

Die letzte Zeile enthält $N$ durch Leerzeichen getrennte ganze Zahlen $A_1, A_2, \ldots, A_N$ ($A_i \in \{0, 1\}$). Dabei gibt $A_i$ an, ob sich zu Beginn ein Stein auf Knoten $i$ befindet.

Die Summe von $N$ über alle Testfälle hinweg überschreitet nicht $2 \times 10^5$.

Ausgabe

Gib für jeden Testfall die Antwort wie folgt aus.

Falls es unmöglich ist, die Operation genau $N - 1$ Mal auszuführen, gib No in einer einzelnen Zeile aus.

Falls es möglich ist, gib in der ersten Zeile Yes aus, gefolgt von der Folge der Kanten in der zweiten Zeile im folgenden Format:

$$ e_1 \ e_2 \ \ldots \ e_{N-1} $$

Hierbei bezeichnet $e_k$ ($1 \le e_k \le N - 1$) den Index der in der $k$-ten Operation gewählten Kante. Falls es mehrere gültige Folgen gibt, kannst du eine beliebige davon ausgeben.

Beispiele

Eingabe 1

3
5
1 2
2 3
2 4
2 5
1 1 1 0 0
2
1 2
0 0
9
1 2
2 3
2 4
4 5
4 6
6 7
6 8
6 9
0 0 1 0 1 1 0 1 1

Ausgabe 1

Yes
3 2 4 1
No
Yes
6 7 4 2 1 3 5 8

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.