Cod sursa(job #3304012)

Utilizator unomMirel Costel unom Data 19 iulie 2025 18:37:36
Problema Coduri Huffman Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;

#define int long long

struct node
{
    int st, dr, sum;
};

ifstream in("huffman.in");
ofstream out("huffman.out");
int n, cnt, ans;
node v[2000005];
multiset<pair<int, int>> s;
pair<int, int> rez[1000005];

void dfs(int node, int cod, int len)
{
    if(v[node].st == 0)
    {
        rez[node] = {len, cod};

        return;
    }

    ans += v[node].sum;

    dfs(v[node].st, 2 * cod, len + 1);
    dfs(v[node].dr, 2 * cod + 1, len + 1);
}

signed main()
{
    in>>n;

    int x;
    for(int i = 1; i<=n; i++)
    {
        in>>x;

        s.insert({x, i});
    }

    cnt = n;
    while(s.size() >= 2)
    {
        pair<int, int> a = (*s.begin());
        s.erase(s.begin());

        pair<int, int> b = (*s.begin());
        s.erase(s.begin());

        cnt++;
        v[cnt].st = a.second;
        v[cnt].dr = b.second;
        v[cnt].sum = a.first + b.first;

        s.insert({v[cnt].sum, cnt});
    }

    dfs(cnt, 0, 0);

    out<<ans<<'\n';
    for(int i = 1; i<=n; i++)
    {
        out<<rez[i].first<<" "<<rez[i].second<<'\n';
    }

    return 0;
}