Advertisement
cmiN

Galia

Mar 15th, 2011
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3.  
  4. const int nMax = 101, mMax = 1000;
  5. int nodes, edges, selected;
  6. struct edge {
  7.     int x, y, c;
  8. } edgeVec[mMax], edgeSel[mMax];
  9. bool viz[nMax], vizEdge[mMax];
  10.  
  11. void read()
  12. {
  13.     freopen("galia.in", "rt", stdin);
  14.     freopen("galia.out", "wt", stdout);
  15.     scanf("%d %d", &nodes, &edges);
  16.     for (int i = 0; i < edges; i++) {
  17.         scanf("%d %d %d", &edgeVec[i].x, &edgeVec[i].y, &edgeVec[i].c);
  18.     }
  19. }
  20.  
  21. int compare(const void* first, const void* second)
  22. {
  23.     return ((edge*)first)->c - ((edge*)second)->c;
  24. }
  25.  
  26. void prim()
  27. {
  28.     edgeSel[selected++] = edgeVec[0];
  29.     viz[edgeVec[0].x] = viz[edgeVec[0].y] = 1;
  30.     while (selected < nodes - 1) {
  31.         for (int i = 1; i < edges; i++) {
  32.             if (viz[edgeVec[i].x] && !viz[edgeVec[i].y]) {
  33.                 edgeSel[selected++] = edgeVec[i];
  34.                 viz[edgeVec[i].y] = 1;
  35.                 vizEdge[i] = 1;
  36.             } else if (!viz[edgeVec[i].x] && viz[edgeVec[i].y]) {
  37.                 edgeSel[selected++] = edgeVec[i];
  38.                 viz[edgeVec[i].x] = 1;
  39.                 vizEdge[i] = 1;
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. void write()
  46. {
  47.     printf("%d\n", selected);
  48.     for (int i = 0; i < selected; i++) {
  49.         printf("%d %d\n", edgeSel[i].x, edgeSel[i].y);
  50.     }
  51. }
  52.  
  53. void solve()
  54. {
  55.     edge temp;
  56.     qsort(edgeVec, edges, sizeof(edge), compare);
  57.     prim();
  58.     write();
  59.     // de aici nu se stie :))
  60.     fclose(stdin);
  61.     fclose(stdout);
  62. }
  63.  
  64. int main()
  65. {
  66.     read();
  67.     solve();
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement