Source code for submission s1096

fr.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct hrana {
  5. struct hrana *next;
  6. struct vrchol *vrchol;
  7. } Hrana;
  8.  
  9. typedef struct vrchol {
  10. int val;
  11. int uzav;
  12. struct hrana *hrana;
  13. } Vrchol;
  14.  
  15. Vrchol* vytvor(int val, int uzav) {
  16. Vrchol *v = (Vrchol *) malloc(sizeof(Vrchol));
  17. v->val = val;
  18. v->uzav = uzav;
  19. v->hrana = NULL;
  20. return v;
  21. }
  22.  
  23. Vrchol* hladaj(Vrchol *v, int A, int B) {
  24. Vrchol *p;
  25. if (v->val == A || v->val == B) {
  26. return v;
  27. }
  28. else {
  29. Hrana *hrana = v->hrana;
  30. while (hrana != NULL) {
  31. p = hladaj(hrana->vrchol, A, B);
  32. if(p!=NULL)
  33. return p;
  34. hrana = hrana->next;
  35. }
  36. }
  37. return NULL;
  38. }
  39.  
  40. void pridaj(Vrchol* v, int A, int B, int uzav) {
  41. Hrana *nova = (Hrana *) malloc(sizeof(Hrana));
  42. nova->next = NULL;
  43. if (v->val == A) // v->B
  44. nova->vrchol = vytvor(B, uzav);
  45. else
  46. nova->vrchol = vytvor(A, uzav);
  47. if (v->hrana == NULL) // Bez hran
  48. v->hrana = nova;
  49. else {
  50. Hrana *h = v->hrana;
  51. while (h != NULL) {
  52. if (h->next == NULL) {
  53. h->next = nova;
  54. break;
  55. }
  56. h = h->next;
  57. }
  58. }
  59. }
  60.  
  61. int uzaver(Vrchol *v) {
  62. int pom = 0;
  63. if (v->hrana == NULL) return v->uzav;
  64. else
  65. {
  66. Hrana *h = v->hrana;
  67. while (h != NULL) {
  68. pom += uzaver(h->vrchol);
  69. h = h->next;
  70. }
  71. }
  72. return pom;
  73. }
  74.  
  75. int main()
  76. {
  77.  
  78. int n, val, A, B;
  79. while (scanf("%d %d", &n, &val) > 0) {
  80. Vrchol *v = vytvor(val, -1);
  81. while ((n-1) > 0) {
  82. scanf("%d %d %d", &A, &B, &val);
  83. //printf("%d\n", hladaj(v, A, B)->val);
  84. pridaj(hladaj(v, A, B), A, B, val);
  85. n--;
  86. }
  87. printf("%d\n", uzaver(v));
  88. free(v);
  89. }
  90.  
  91.  
  92. return 0;
  93. }
  94.