Maruf_Hasan

1208

Jan 30th, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define pb push_back
  5. #define ll long long
  6. #define pii pair<int,int>
  7. #define pll pair<ll,ll>
  8. //#define M 100007
  9. #define INF 1e9
  10. #define INFL 1e18
  11. #define PI acos(-1)
  12. #define mp make_pair
  13. #define fast_in_out ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  14.  
  15. #include<bits/stdc++.h>
  16. using namespace std;
  17. #define M 1000000
  18.  
  19.  
  20. long long pr[M];
  21.  
  22. struct edge
  23. {
  24. long long u,v,w;
  25. bool operator<(const edge& p)const
  26. {
  27. return w<p.w;
  28. }
  29. };
  30. vector<edge>e,tree;
  31. vector<int>cost;
  32. long long root(long long i)
  33. {
  34. while(pr[i]!=i)
  35. {
  36. i=pr[i];
  37. }
  38. return i;
  39. }
  40.  
  41.  
  42. int mst(int n)
  43. {
  44. sort(e.begin(),e.end(),cmp);
  45. for(int i=0;i<n;i++)
  46. pr[i]=i;
  47. int cnt=0,s=0;
  48. for(int i=0;i<e.size();i++)
  49. {
  50. int u=root(e[i].u);
  51. int v=root(e[i].v);
  52. if(u!=v)
  53. {
  54. pr[u]=v;
  55. cnt++;
  56. //cout<<u+1<<" "<<v+1<<" "<<e[i].w<<endl;
  57. tree.pb(e[i]);
  58.  
  59. s+=e[i].w;
  60. if(cnt==n-1)
  61. break;
  62. }
  63. }
  64.  
  65. return s;
  66. }
  67.  
  68.  
  69. int myfunc(char c[])
  70. {
  71. int num=0;
  72. for(int i=0;i<strlen(c);i++)
  73. {
  74. num=num*10+(c[i]-'0');
  75. }
  76. return num;
  77. }
  78.  
  79.  
  80. int main()
  81. {
  82. fast_in_out;
  83. int t,kase=0;
  84. cin>>t;
  85. while(kase<t)
  86. {
  87.  
  88. int n;
  89. cin>>n;
  90. vector<int>v[n+5];
  91. for(int i=0;i<n;i++)
  92. {
  93. char str[10000];
  94. gets(str);
  95. char *token=strtok(str," ,");
  96. while(token!=NULL)
  97. {
  98. int num=myfunc(token);
  99. v[i].pb(num);
  100. token=strtok(NULL," ,");
  101. }
  102. }
  103.  
  104. for(int i=0;i<n;i++)
  105. {
  106. for(int j=0;j<v[i].size();j++)
  107. {
  108. if(v[i][j]!=0)
  109. {
  110.  
  111. edge E;
  112. E.u=i;
  113. E.v=j;
  114. E.w=v[i][j];
  115. // cout<<E.u+1<<" "<<E.v+1<<" "<<E.w<<endl;
  116. e.pb(E);
  117. }
  118. }
  119. }
  120.  
  121. int ans=mst(n);
  122. cout<<"Case "<<kase+1<<" :"<<endl;
  123. for(int i=-0;i<tree.size();i++)
  124. {
  125. int x=tree[i].u;
  126. int y=tree[i].v;
  127. int w=tree[i].w;
  128. char first=(char)min(x,y);
  129. char second=(char)max(x,y);
  130. first=first+'A';
  131. second=second+'A';
  132. cout<<first<<"-"<<second<<" "<<w<<endl;
  133. }
  134. kase++;
  135. e.clear();
  136. tree.clear();
  137. cost.clear();
  138. }
  139. return 0;
Advertisement
Add Comment
Please, Sign In to add comment