Source code for submission s1029

spider.cpp

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7. class node
  8. {
  9. public:
  10. int itr;
  11. list<node*> links;
  12. };
  13.  
  14. node array[2000];
  15. bool barray[2000];
  16.  
  17. void trace(node * first)
  18. {
  19. if (barray[first->itr])
  20. return;
  21. barray[first->itr] = true;
  22. for (list<node*> ::iterator itr = first->links.begin(); itr != first->links.end(); itr++)
  23. trace(*itr);
  24. }
  25.  
  26. int main()
  27. {
  28. int nodes, links;
  29. for (int i = 0; i < 2000; i++)
  30. array[i].itr = i;
  31. while (scanf("%d%d",&nodes, &links) == 2)
  32. {
  33. int maxlength = 0;
  34. int totallength = 0;
  35. bool disc = false;
  36. for (int i = 0; i < nodes; i++)
  37. array[i].links.clear();
  38. memset(barray, 0, sizeof(barray));
  39. for (int i = 0; i < links; i++)
  40. {
  41. int node1, node2, length;
  42. scanf("%d%d%d",&node1,&node2,&length);
  43. if (length > maxlength)
  44. maxlength = length;
  45. totallength += length;
  46. node1--;
  47. node2--;
  48.  
  49. array[node1].links.insert(array[node1].links.end(), & array[node2]);
  50. array[node2].links.insert(array[node2].links.end(), & array[node1]);
  51. }
  52. trace(array);
  53. for (int i = 0; i < nodes; i++)
  54. if (!barray[i])
  55. {
  56. disc = true;
  57. break;
  58. }
  59. if (disc)
  60. {
  61. printf("disconnected\n");
  62. continue;
  63. }
  64. printf("%d\n", maxlength * 3 - totallength);
  65.  
  66. }
  67. return 0;
  68. }
  69.  
  70.