給出乙個完全圖,邊權為兩點權值的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 對雙向的直接認識關係,...