#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
struct huffman{
int num;
int weight;
string s="";
int parent;
int lchild;
int rchild;
huffman(){
}
huffman(int nu,int w,string ss,int p,int l,int r){
num=nu;
weight=w;
s=ss;
parent=p;
lchild=l;
rchild=r;
}
bool friend operator<(huffman a,huffman b){
return a.weight>b.weight;
}
};
huffman tree[100];
priority_queue<huffman>q;
void huffcode(huffman &t){
if(t.lchild!=-1){
tree[t.lchild].s=t.s+'0';
tree[t.rchild].s=t.s+'1';
huffcode(tree[t.lchild]);
huffcode(tree[t.rchild]);
}else
return;
}
main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>tree[i].weight;
tree[i].num=i;
tree[i].parent=tree[i].lchild=tree[i].rchild=-1;
q.push(tree[i]);
}
for(int i=n;i<=2*n-2;i++){
huffman s1=q.top();
q.pop();
huffman s2=q.top();
q.pop();
huffman s3(i,s1.weight+s2.weight,"",-1,s1.num,s2.num);
q.push(s3);
tree[i]=s3;
tree[s1.num].parent=tree[s2.num].parent=i;
}
huffcode(tree[2*n-2]);
for(int i=0;i<n;i++)
cout<<tree[i].s<<" ";
return 0;
}
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
struct huffman{
int num;
int weight;
string s="";
int parent;
int lchild;
int rchild;
huffman(){
}
huffman(int nu,int w,string ss,int p,int l,int r){
num=nu;
weight=w;
s=ss;
parent=p;
lchild=l;
rchild=r;
}
bool friend operator<(huffman a,huffman b){
return a.weight>b.weight;
}
};
huffman tree[100];
priority_queue<huffman>q;
void huffcode(huffman &t){
if(t.lchild!=-1){
tree[t.lchild].s=t.s+'0';
tree[t.rchild].s=t.s+'1';
huffcode(tree[t.lchild]);
huffcode(tree[t.rchild]);
}else
return;
}
main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>tree[i].weight;
tree[i].num=i;
tree[i].parent=tree[i].lchild=tree[i].rchild=-1;
q.push(tree[i]);
}
for(int i=n;i<=2*n-2;i++){
huffman s1=q.top();
q.pop();
huffman s2=q.top();
q.pop();
huffman s3(i,s1.weight+s2.weight,"",-1,s1.num,s2.num);
q.push(s3);
tree[i]=s3;
tree[s1.num].parent=tree[s2.num].parent=i;
}
huffcode(tree[2*n-2]);
for(int i=0;i<n;i++)
cout<<tree[i].s<<" ";
return 0;
}