mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-04 01:01:43 +00:00
update
This commit is contained in:
parent
776290a513
commit
8d2960a1ae
@ -6,7 +6,7 @@ add_compile_options(-fsanitize=address,pointer-compare,pointer-subtract,undefine
|
||||
add_link_options(-fsanitize=address,pointer-compare,pointer-subtract,undefined -fno-omit-frame-pointer)
|
||||
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD 26)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
|
96
src/8/22/P4551.cpp
Normal file
96
src/8/22/P4551.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
void fast_io() {
|
||||
std::ios_base::sync_with_stdio(false);
|
||||
std::cin.tie(NULL);
|
||||
}
|
||||
|
||||
const int MAXN = 100005;
|
||||
const int BITS = 31;
|
||||
std::vector<std::pair<int, int>> adj[MAXN];
|
||||
int dist[MAXN];
|
||||
namespace Trie {
|
||||
int trie[MAXN * BITS][2];
|
||||
int nodec;
|
||||
|
||||
void init() {
|
||||
trie[0][0] = trie[0][1] = 0;
|
||||
nodec = 1;
|
||||
}
|
||||
|
||||
void insert(int val) {
|
||||
int curnode = 0;
|
||||
|
||||
for (int i = BITS - 1; i >= 0; --i) {
|
||||
int bit = (val >> i) & 1;
|
||||
if (!trie[curnode][bit]) {
|
||||
|
||||
trie[nodec][0] = trie[nodec][1] = 0;
|
||||
trie[curnode][bit] = nodec++;
|
||||
}
|
||||
curnode = trie[curnode][bit];
|
||||
}
|
||||
}
|
||||
|
||||
int query_max_xor(int val) {
|
||||
int curnode = 0;
|
||||
int maxorval = 0;
|
||||
for (int i = BITS - 1; i >= 0; --i) {
|
||||
int bit = (val >> i) & 1;
|
||||
|
||||
if (trie[curnode][!bit]) {
|
||||
maxorval |= (1 << i);
|
||||
curnode = trie[curnode][!bit];
|
||||
} else {
|
||||
|
||||
curnode = trie[curnode][bit];
|
||||
}
|
||||
}
|
||||
return maxorval;
|
||||
}
|
||||
}
|
||||
|
||||
void dfs(int u, int p, int curxorsum) {
|
||||
dist[u] = curxorsum;
|
||||
for (auto &edge : adj[u]) {
|
||||
int v = edge.first;
|
||||
int weight = edge.second;
|
||||
if (v == p) {
|
||||
continue;
|
||||
}
|
||||
dfs(v, u, curxorsum ^ weight);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
fast_io();
|
||||
|
||||
int n;
|
||||
std::cin >> n;
|
||||
|
||||
for (int i = 0; i < n - 1; ++i) {
|
||||
int u, v, w;
|
||||
std::cin >> u >> v >> w;
|
||||
|
||||
adj[u].push_back({v, w});
|
||||
adj[v].push_back({u, w});
|
||||
}
|
||||
|
||||
dfs(1, 0, 0);
|
||||
|
||||
Trie::init();
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
Trie::insert(dist[i]);
|
||||
}
|
||||
|
||||
int max_ans = 0;
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
max_ans = std::max(max_ans, Trie::query_max_xor(dist[i]));
|
||||
}
|
||||
|
||||
std::cout << max_ans << '\n';
|
||||
|
||||
return 0;
|
||||
}
|
64
src/test.cpp
64
src/test.cpp
@ -1,64 +1,4 @@
|
||||
#include <list>
|
||||
class MyLinkedList {
|
||||
public:
|
||||
std::list<int> l;
|
||||
MyLinkedList() {
|
||||
|
||||
}
|
||||
|
||||
int get(int index) {
|
||||
if(index>=l.size()){
|
||||
return -1;
|
||||
}
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
p++;
|
||||
}
|
||||
return *p;
|
||||
}
|
||||
|
||||
void addAtHead(int val) {
|
||||
l.push_front(val);
|
||||
}
|
||||
|
||||
void addAtTail(int val) {
|
||||
l.push_back(val);
|
||||
}
|
||||
|
||||
void addAtIndex(int index, int val) {
|
||||
if(index==l.size()){
|
||||
l.push_back(val);
|
||||
return;
|
||||
}
|
||||
if(index>l.size())return;
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
++p;
|
||||
}
|
||||
l.insert(p,val);
|
||||
}
|
||||
|
||||
void deleteAtIndex(int index) {
|
||||
if(0<=index && index<l.size()){
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
++p;
|
||||
}
|
||||
l.erase(p);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Your MyLinkedList object will be instantiated and called as such:
|
||||
* MyLinkedList* obj = new MyLinkedList();
|
||||
* int param_1 = obj->get(index);
|
||||
* obj->addAtHead(val);
|
||||
* obj->addAtTail(val);
|
||||
* obj->addAtIndex(index,val);
|
||||
* obj->deleteAtIndex(index);
|
||||
*/
|
||||
|
||||
int main(){
|
||||
int main(){
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user