Tehtäväsi on tutkia, onko verkon pienin virittävä puu yksikäsitteinen eli on tarkalleen yksi tapa muodostaa virittävä puu, jonka paino on pienin.
Voit olettaa, että solmuja on enintään 50 ja luokan metodeita kutsutaan enintään 100 kertaa. Jokaisen kaaren paino on kokonaisluku välillä 1 \dots 1000.
Python
Toteuta tiedostoon uniquetree.py luokka UniqueTree, jossa on seuraavat metodit:
- konstruktori, jolle annetaan solmujen määrä
add_edgelisää solmujen a ja b välille kaaren, jonka paino on xcheckilmoittaa, onko verkon pienin virittävä puu yksikäsitteinen (jos verkko ei ole yhtenäinen, haluttu vastaus onFalse)
class UniqueTree:
def __init__(self,n):
# TODO
def add_edge(self,a,b,x):
# TODO
def check(self):
# TODO
if __name__ == "__main__":
u = UniqueTree(4)
u.add_edge(1,2,2)
u.add_edge(1,3,3)
print(u.check()) # False
u.add_edge(1,4,2)
print(u.check()) # True
u.add_edge(3,4,4)
print(u.check()) # True
u.add_edge(2,4,1)
print(u.check()) # False
Java
Toteuta tiedostoon UniqueTree.java luokka UniqueTree, jossa on seuraavat metodit:
- konstruktori, jolle annetaan solmujen määrä
addEdgelisää solmujen a ja b välille kaaren, jonka paino on xcheckilmoittaa, onko verkon pienin virittävä puu yksikäsitteinen (jos verkko ei ole yhtenäinen, haluttu vastaus onfalse)
public class UniqueTree {
public UniqueTree(int n) {
// TODO
}
public void addEdge(int a, int b, int x) {
// TODO
}
public boolean check() {
// TODO
}
public static void main(String[] args) {
UniqueTree u = new UniqueTree(4);
u.addEdge(1,2,2);
u.addEdge(1,3,3);
System.out.println(u.check()); // false
u.addEdge(1,4,2);
System.out.println(u.check()); // true
u.addEdge(3,4,4);
System.out.println(u.check()); // true
u.addEdge(2,4,1);
System.out.println(u.check()); // false
}
}
