傳送門:tsinsen a1486. 樹
題意:給你一棵樹(n<=1e5),每個點有乙個權值和喜歡不喜歡之分,找出一條路徑至少包含k個喜歡的點,而且異或和最大
思路:樹分治,同時維護字典樹
字典樹每個點維護乙個喜歡的點數的最大值
時間複雜度:nlogn*30
#include
using
namespace
std;
const
int n=101000;
typedef pair pi;
struct edgee[n*2];
int tot,head[n];
void addedge(int from,int to);
head[from]=tot++;
}void init()
int count,size[n],f[n],root,k,ans,a[n],color[n];
bool del[n];
void getroot(int u,int fa)
f[u]=max(f[u],count-size[u]);
if(f[u]struct trie
void insert(int x,int dep)
u=ch[u][c];
val[u]=max(val[u],dep);}}
int find(int x,int dep)
return ans;
}}trie;
vector
tmp;
void getdeep(int u,int pre,int dep,int pre_value,int value));
for(int i=head[u];i!=-1;i=e[i].next)
}void work(int u)
}}int main()
count=f[0]=n,ans=-1;
memset(del,false,sizeof(del));
getroot(1,root=0);
work(root);
printf("%d\n",ans);
return
0;}
樹鏈剖分 樹鏈剖分講解
好了,這樣我們就成功解決了對樹上修改查詢邊權或點的問題。下面放上 vector v maxn int size maxn dep maxn val maxn id maxn hson maxn top maxn fa maxn 定義 int edge 1,num 1 struct tree e ma...
樹鏈剖分(輕重樹)模板
例題 樹鏈剖分就是用兩個dfs重新給樹編號 深度 求父節點 求重兒子 子樹大小 每條重鏈的頂端,然後用線段樹維護新的編號的樹 include include using namespace std define n 200010 int n,m,r,mod int head n nex n e n ...
目錄樹 (30 分)
在zip歸檔檔案中,保留著所有壓縮檔案和目錄的相對路徑和名稱。當使用winzip等gui軟體開啟zip歸檔檔案時,可以從這些資訊中重建目錄的樹狀結構。請編寫程式實現目錄的樹狀結構的重建工作。輸入首先給出正整數n 10 4 表示zip歸檔檔案中的檔案和目錄的數量。隨後n行,每行有如下格式的檔案或目錄的...