Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAXN 200005
  3. using namespace std;
  4. ifstream in("apm.in");
  5. ofstream out("apm.out");
  6. struct edge{
  7. int nod,cost;
  8. edge(int nod, int cost):nod(nod),cost(cost){}
  9. bool operator<(const edge oth) const
  10. {
  11. return cost>oth.cost;
  12. }
  13. };
  14. int n,m,k,r;
  15. vector<edge> G[MAXN];
  16. priority_queue<edge> pq;
  17. int parent[MAXN],key[MAXN];
  18. bool f[MAXN];
  19. int main()
  20. {
  21. in>>n>>m;
  22. for(int i=1;i<=m;++i)
  23. {
  24. int a,b,c;
  25. in>>a>>b>>c;
  26. G[a].push_back(edge(b,c));
  27. G[b].push_back(edge(a,c));
  28. }
  29. fill(begin(parent),end(parent),-1);
  30. fill(begin(key),end(key),1<<30);
  31. pq.push(edge(1,0));
  32. key[1]=0,parent[1]=0;
  33. while(!pq.empty())
  34. {
  35. int u=pq.top().nod;
  36. pq.pop();
  37. f[u]=1;
  38. for(auto i:G[u])
  39. {
  40. int v=i.nod,w=i.cost;
  41. if(!f[v]&&key[v]>w)
  42. {
  43. key[v]=w;
  44. pq.push(edge(v,key[v]));
  45. parent[v]=u;
  46.  
  47. }
  48. }
  49. }
  50.  
  51. for(int i=2;i<=n;++i)
  52. if(parent[i]>0)
  53. ++k,r+=key[i];
  54. out<<r<<'\n'<<k<<'\n';
  55. for(int i=2;i<=n;++i)
  56. if(parent[i]>0)
  57. out<<i<<' '<<parent[i]<<'\n';
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement