Pagini recente » Cod sursa (job #3224267) | Cod sursa (job #894536) | Cod sursa (job #1944699) | Cod sursa (job #115310) | Cod sursa (job #2791841)
#include <bits/stdc++.h>
#define N NULL
#define ll long long
using namespace std;
ifstream fin("huffman.in");
ofstream fout("huffman.out");
const int NMAX = 1e6+6;
struct nod
{
ll val;
int poz;
nod *left_son, *right_son;
nod(ll _val, nod *_left_son, nod *_right_son, int _poz = -1)
{
val = _val;
left_son = _left_son;
right_son = _right_son;
poz = _poz;
}
nod()
{
}
};
///w - heap ul pe care il voi modifica
///init - nodurile initiale (caracterele de la care plec)
vector <nod> w, init;
bool cmp(nod a, nod b)
{
return a.val > b.val;
}
struct sol
{
ll adancime, dec;
};
sol rasp[NMAX];
///0 pe stanga si 1 pe dreapta
void parc(nod *node, ll ad, ll val)
{
//fout << node->val << ' ';
///daca e o frunza
if(node -> poz != -1)
rasp[node->poz].adancime = ad, rasp[node->poz].dec = val;
if(node -> left_son != N)
parc(node->left_son, ad+1, (val)<<1);
if(node -> right_son != N)
parc(node->right_son, ad+1, (val+1)<<1);
// fout << node -> val << ' ';
// if(node -> left_son != N)
// fout << node -> left_son -> val << ' ';
//
// if(node -> right_son != N)
// fout << node -> right_son -> val << ' ';
// fout << '\n';
// if(node -> left_son != N)
// parc(node -> left_son, ad+1, val+1);
//
// if(node -> right_son != N)
// parc(node -> right_son, ad+1, val+1);
}
void codif(nod *node)
{
}
int main()
{
int n, i;
ll val;
init.push_back(nod(0, N, N));
fin >> n;
for(i = 1; i <= n; ++i)
{
fin >> val;
w.push_back(nod(val, N, N, i));
init.push_back(w[w.size()-1]);
}
make_heap(w.begin(), w.end(), cmp);
// for(vector<nod>::iterator it = w.begin(); it != w.end(); ++it)
// fout << it -> val << ' ';
nod *first, *second, *root;
// while(w.size() > 1)
// {
// first = new nod;
// second = new nod;
//
// *first = w[0];
// pop_heap(w.begin(), w.end(), cmp);
// w.pop_back();
//
// *second = w[0];
// pop_heap(w.begin(), w.end(), cmp);
// w.pop_back();
//
// w.push_back(nod(first->val + second->val, first, second));
// push_heap(w.begin(), w.end(), cmp);
// }
// root = new nod;
// *root = w[0];
// w.pop_back();
//
// parc(root, 0ll, 0ll);
// ll lg = 0;
//
// for(i = 1; i <= n; ++i)
// lg += rasp[i].adancime * init[i].val;
// fout << lg << '\n';
// for(i = 1; i <= n; ++i)
// fout << rasp[i].adancime << ' ' << rasp[i].dec << '\n';
return 0;
}