Exemplo n.º 1
0
void connect(int A, int B)
{
    City *paA = cities[A].getPa(), *paB = cities[B].getPa();
    if(paA == paB) return;
    
    assert(paB->minY <= paB->maxY);
    
    if(paB->minY != paB->maxY)
    {
        tree1.Add(-1, paB->minY, paB->maxY - 1);
        tree2.Add(-paB->size, paB->minY, paB->maxY - 1);
    }
    if(paA->minY != paA->maxY)
    {
        tree1.Add(-1, paA->minY, paA->maxY - 1);
        tree2.Add(-paA->size, paA->minY, paA->maxY - 1);
    }
     
    paA->size += paB->size;
    paB->ppa = paA;
    paA->minY = min(paA->minY, paB->minY);
    paA->maxY = max(paA->maxY, paB->maxY);
    assert(paA->minY <= paA->maxY);
    
    if(paA->minY != paA->maxY)
    {
        tree1.Add(1, paA->minY, paA->maxY - 1);
        tree2.Add(paA->size, paA->minY, paA->maxY - 1);
    }
}