Il y a n cases, numérotées de 1 à n . Chaque boîte est verrouillée, de sorte qu'elle peut être ouverte par un seul type de clé correspondant (également numéroté 1-n ). Ces clés sont dispersées au hasard dans les boîtes (une boîte peut avoir n'importe quel nombre de clés, une clé peut avoir un nombre quelconque de doublons), puis toutes les boîtes sont fermées. Un trésor (numéroté 0 ) a également été enfermé dans de nombreuses boîtes.
Vous avez engagé un serrurier pour récupérer tous les trésors. Il facture pour chaque boîte qu'il ouvre. L'ouverture d'une boîte pour laquelle la clé est déjà disponible est gratuite.
L'entrée est le contenu de chaque boîte. Vous pouvez décider du format de l'entrée.
Produisez le coût minimum requis pour obtenir les trésors.
Remarques
- Votre algorithme peut prendre beaucoup de temps, mais ce n'est pas pertinent.
- Le code le plus court gagne.
- Pas besoin de s'inquiéter d'une entrée invalide.
Exemples de données
Ici, la ligne i représente les clés présentes dans la case i .
Contribution
2 0
3
4 0
5 6 0
6
0
Production
1
Contribution
2 0
3 0
4 0
6
5 0
Production
3
Contribution
2 4 0
3 0
1 0
6
5 0
Production
2
Contribution
1
3 4
2 6
5
Production
0
[[1] [3 4] [] [] [2 6] [5]]
ou peut-être {{1},{3,4},{},{},{2,6},{5}}
. De cette façon, la plupart des langues peuvent réduire la lecture de l'entrée à quelque chose d'aussi trivial i=eval(read())
et se concentrer sur la partie amusante du défi.