public void AddTo(BinomialHeap <T> otherHeap)
        {
            otherHeap.Insert(Value);
            if (Sibling != null)
            {
                Sibling.AddTo(otherHeap);
            }

            if (Child != null)
            {
                Child.AddTo(otherHeap);
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to the Completely Fair Scheduler Simulator");
            Console.WriteLine("Do you want to introduce a scheduling bias? (Y/n):");
            String wantBias = Console.ReadLine().Trim().ToLower();
            int    schedulingBias;

            if (wantBias.Equals("y"))
            {
                Console.WriteLine("Pick your bias: ");
                Console.WriteLine("1. Energy");
                Console.WriteLine("2. Performance");
                Console.WriteLine("3. UserFocus");

                schedulingBias = int.Parse(Console.ReadLine());
                switch (schedulingBias)
                {
                case 1:
                    currentBias = SchedulingBias.Energy;
                    break;

                case 2:
                    currentBias = SchedulingBias.Performance;
                    break;

                case 3:
                    currentBias = SchedulingBias.UserFocus;
                    break;

                default:
                    currentBias = SchedulingBias.Default;
                    break;
                }
            }


            Timer taskTimer = new Timer
            {
                Interval  = new Random().Next(1000),
                Enabled   = true,
                AutoReset = true,
            };

            taskTimer.Elapsed += GenerateTasks;

            Console.Clear();
            Console.WriteLine("\tProcessID\tPriority\tvRuntime\tPower Consumption\n");

            BinomialHeap <Task> schedulingHeap = new BinomialHeap <Task>();

            Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);

            while (true)
            {
                Task readyTask = null;
                processReadyQueue.TryPop(out readyTask);

                if (readyTask != null)
                {
                    schedulingHeap.Insert(readyTask);

                    if (!running)
                    {
                        running = true;
                        Task   currentTask = schedulingHeap.ExtractMin();
                        Thread cpuLoop     = new Thread(() => CPUThread(currentTask));
                        cpuLoop.Start();
                    }
                }
            }
        }