xdoj 1069 MST模板题

别看题目出成二分图,其实就是个裸的MST

  1. /*
  2. Author: fffasttime
  3. Date: 
  4. */
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. typedef long long ll;
  8. #define inc(i,n) for (int i=0;i<n;i++)
  9. const int N=100010;
  10.  
  11. struct Node{
  12. 	int x,y,c;
  13. 	bool operator<(const Node &v) const{return c>v.c;}
  14. }e[100010];
  15.  
  16. int pa[20010];
  17. int fi(int x){if (pa[x]!=x) pa[x]=fi(pa[x]); return pa[x];}
  18. int main(){
  19. 	int T; cin>>T;
  20. 	while (T--){
  21. 		int n,m,K,x,ec=0;
  22. 		cin>>m>>n>>K>>x;
  23. 		for (int i=0;i<x;i++){
  24. 			int x,y,c; scanf("%d%d%d",&x,&y,&c);
  25. 			e[ec++]=(Node){x,y+m,c};
  26. 		}
  27. 		inc(i,n+m) pa[i]=i;
  28. 		sort(e,e+ec);
  29. 		int sum=0;
  30. 		for (int i=0,k=0;i<n+m-1 && k<ec;i++){
  31. 			while (fi(e[k].x)==fi(e[k].y) && k<ec) k++;
  32. 			if (k>=ec) break;
  33. 			pa[pa[e[k].x]]=pa[e[k].y];
  34. 			sum+=e[k].c;
  35. 		}
  36. 		cout<<(n+m)*K-sum<<'\n';
  37. 	}
  38. 	return 0;
  39. }

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注