2.16日学习总结

今天是做最小生成树的题解。是两个并非模板格式的。但是运用了最小生成树知识的题目。

题目如图所示。

题目中给出的条件是要求形成k个树 但是一个树最低可以 为一。然后我们就可以。将它转化为求一颗节点数为n减去k减去1,这样的话就可以解决这个题目。具体代码如下,

    #include<stdio.h>
  #include <algorithm>
   using namespace std;
   int f[1000000];
   struct node{
   	int x,y,t;
  	 }b[1000000];
   bool operator <(node a,node b){
   	return a.t<b.t;}
    int find(int x) 
    {
    	if(f[x]==x){
             
         
    	return x;}
    	else {
    	  f[x]=find(f[x]);
    	  return f[x];} 
        
    }
   int n,m,num,ans,k;
   int main()
   {
   	scanf("%d%d%d",&n,&m,&k);
   	for(int i=1;i<=n;i++){
  	 	f[i]=i;}
   	for(int i=1;i<=m;i++)
   		scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].t);
   	sort(b+1,b+1+m);
   	for(int i=1;i<=m;i++)
   	{
   	int x=find(b[i].x),y=find(b[i].y);
   	if(x!=y) {
  	f[x]=y;
  	num++;
  	ans+=b[i].t;}
  	if(num==n-k){
 	 printf("%d",ans);
 	 return 0;
 	 }
   	}
    
	   	printf("No Answer");
	   
    return 0;
   }
   

因为一题的题目就是

 这道题就是将最小生成数改成了最大生成树,只要将排序的部分改成从大到小就行了。具体代码如下,

  #include<stdio.h>
 #include <algorithm>
  using namespace std;
  int f[1000000];
  struct node{
  	int x,y,t;
 	 }b[1000000];
  bool operator <(node a,node b){
  	return a.t>b.t;}
   int find(int x) 
   {
   	if(f[x]==x){
            
        
   	return x;}
   	else {
   	  f[x]=find(f[x]);
   	  return f[x];} 
       
   }
  int n,m,num,ans,k;
  int main()
  {
  	scanf("%d%d%d",&n,&m,&k);
  	for(int i=1;i<=n;i++){
 	 	f[i]=i;}
  	for(int i=1;i<=m;i++)
  		scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].t);
  	sort(b+1,b+1+m);
  	for(int i=1;i<=m;i++)
  	{
  	int x=find(b[i].x),y=find(b[i].y);
  	if(x!=y) {
 	f[x]=y;
 	num++;
 	ans+=b[i].t;}
 	if(num==k){
	 printf("%d\n",ans);
	 break;	
	 }
  	}
   return 0;
  }
  

今天的学习总结就到这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值