按照建哈夫曼树,然后查找的思路,为什么无法输出??啊啊啊啊啊啊
查看原帖
按照建哈夫曼树,然后查找的思路,为什么无法输出??啊啊啊啊啊啊
873786
wangjiajinself楼主2023/12/21 15:57
#include <iostream>
#include <queue>
using namespace std;
const int N=1e5+1;
int n,k,s=0;
long long w[N],ans1=0,ans2=0,sum=0;
struct Queee{
	long long w,tim;
	int num;
};
struct cmp{
	bool operator() (Queee o,Queee p)
	{
		if(o.w==p.w) return o.tim<=p.tim;
			return o.w<=p.w;
	}
};
struct Node{
	long long w,time,son[11]={-1};
}tre[N];
long long dfs(long long u)
{
	sum++;
	if(tre[u].time==0) {
		long long hui=sum;
		sum=0;
		return hui;
	}
	for(int i=1;i<=k&&tre[u].son[i]!=-1;i++)
	{
		ans1+=dfs(tre[u].son[i]);
		ans2=max(ans2,dfs(tre[u].son[i]));
	}
	if(u==s)
	    return ans1;
}
int main() {
	priority_queue<Queee,vector<Queee>, cmp> q;
	cin>>n>>k;
	for(int i=1;i<=n;i++) 
	{
		cin>>w[i];
		q.push({w[i],0,i});
	}
	int ou=0;
	while(q.size()!=1)
	{
		ou++;
		long long sum=0;
		int i;
		for(i=1;i<=k&&q.size()!=0;i++) 
		{
			Queee nw=q.top();
			q.pop();
			tre[s].w=nw.w;
			tre[s].time=nw.tim;
			sum+=nw.w;
		}
		i--;
		tre[s].w=sum;
		tre[s].time=ou;
		for(int j=s-i;j<=s-1;j++)
		tre[s].son[j-s]=j;
		q.push({sum,ou,-1});
	}
	cout<<dfs(s);
	cout<<ans2;
	return 0;
}
2023/12/21 15:57
加载中...