uoj 176 新年的繁榮

2021-08-16 21:06:18 字數 961 閱讀 7895

給出乙個完全圖,邊權為兩點權值的and,求最大生成樹。

這題用最小生成樹的boruvka演算法。

大概就是每次找到每乙個聯通塊權值最大的邊,將這些聯通塊合併,直到只剩乙個聯通塊。因為每次聯通塊的個數至少減半,所以只會做log次操作。

那麼這題相當於每個點有不同顏色,要找到每個點的異色點中最大的and值。

扔題解跑

code:

#include

#include

#include

#include

#define ll long long

using namespace std;

int n,m,fa[100010];

int a[100010];

int findfa(int

x) struct node

node(int

x,int

y) }mx[100010];

struct trnodetr[1000010];int tot,root;

int new_node()

node update(node lc,node rc)

void cmin(int &x,int

y) void cmax(int &x,int

y) void ins(int &x,int dep,int c,int id)

int merge(int

x,int

y)node findans(int

x,int dep,int c,int id)

void dfs(int

x,int dep)

void build()

int main()

for(int i=1;i<=n;i++)

if(fa[i]==i)

}printf("%lld",ans);

}

UOJ176 新年的繁榮

題目鏈結 boruvka 演算法就是先把每個點看作乙個聯通塊,然後不斷在聯通塊之間找最優的邊進行合併。因為每次聯通塊的數量最少縮小一半。所以合併次數是 log 的 先把所有的點權掛到 trie 樹上。然後對於每個聯通塊進行合併的時候。對於聯通塊中的每個點都去 trie 上搜尋他能找到的最優秀的邊。也...

uoj176 新年的繁榮

對於這種邊權難以直接維護的都直接考慮brouvka演算法。顯然,我們要做的是實現乙個可以查詢 x最大的資料結構。可以先對於所有權值建立一顆01 trie樹。考慮在trie樹查詢答案的過程,可以考慮乙個從高位到低位的貪心。當x的第i位為1時,最優策略一定是能走1就走1。當x的第i位為0時,既可以走0也...

uoj 175 新年的網警

在這新年的第一天,猴族首領猴腮雷打算來整治一下網路風氣。這時,他聽說在乙個叫做 universal oj 使用者群 的 qq 群中有人在散播 開 謠言 車 於是他就派了一群網警把這個使用者群裡的人都抓了回來,試圖找到謠言的源頭。這個使用者群中有 nn 個人,這些人中存在 mm 對雙向的直接認識關係,...