題目大意:給定一棵樹,要求增加若干條邊,將其轉化為完全圖,且該完全圖以該樹為唯一的最小生成樹,求增加的邊權最小是多少。
題解:完全圖的問題一般要考慮組合計數。重新跑一遍克魯斯卡爾演算法,每次並查集在合併時進行計數,因為要求最小生成樹唯一,必須保證每條邊都比當前連線兩個聯通塊的邊要至少大 1,因此每次合併對答案的貢獻為 \((w+1)*(size[x]*size[y]-1)\)。
**如下
#include using namespace std;
const int maxn=6010;
struct node
}e[maxn];
int n,f[maxn],size[maxn];
long long ans;
int find(int x)
void read_and_parse()
void solve()
printf("%lld\n",ans);
}int main()
return 0;
}
CH 6201走廊潑水節
描述 簡化版題意 給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。我們一共有n個oier打算參加這個潑水節,同時很湊巧的是正好有n個水龍頭 至於為什麼,我不解釋 n個水龍頭之間正好有n 1條小道,並且每個水龍頭都可以...
CH6201 走廊潑水節 最小生成樹
描述 簡化版題意 給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。我們一共有n個oier打算參加這個潑水節,同時很湊巧的是正好有n個水龍頭 至於為什麼,我不解釋 n個水龍頭之間正好有n 1條小道,並且每個水龍頭都可以...
走廊潑水節
給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。輸入格式 第一行包含整數t,表示共有t組測試資料。對於每組測試資料,第一行包含整數n。接下來n 1行,每行三個整數x,y,z,表示x節點與y節點之間存在一條邊,長度為z...