mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-22 07:01:46 +00:00
Compare commits
No commits in common. "8b7ef641075a9e468c831c09eadcb9a4eb0b55ee" and "e04a08e502431d26ffcde2784a7c28fb270ac8b1" have entirely different histories.
8b7ef64107
...
e04a08e502
@ -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)
|
add_link_options(-fsanitize=address,pointer-compare,pointer-subtract,undefined -fno-omit-frame-pointer)
|
||||||
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
|
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 26)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
|||||||
@ -1,96 +0,0 @@
|
|||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
void fast_io() {
|
|
||||||
std::ios_base::sync_with_stdio(false);
|
|
||||||
std::cin.tie(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 qmaxor(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::qmaxor(dist[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout << max_ans << '\n';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
#include <cstdint>
|
|
||||||
#include <iostream>
|
|
||||||
#include <istream>
|
|
||||||
#include <string>
|
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
|
||||||
using ll = int64_t;
|
|
||||||
|
|
||||||
const ll maxlen = 1e3;
|
|
||||||
|
|
||||||
#define s(j)s[(j)]-'a'
|
|
||||||
#define pv(v)do{/*std::cout<<#v<<" :"<<(v)<<'\n';*/}while(0)
|
|
||||||
|
|
||||||
static inline void solve(){
|
|
||||||
ll n,q;
|
|
||||||
std::cin>>n>>q;
|
|
||||||
static std::vector<std::vector<std::pair<ll, ll>>> t;
|
|
||||||
t.clear();
|
|
||||||
t.resize(maxlen,std::vector<std::pair<ll, ll>>(27));
|
|
||||||
ll tot=1;
|
|
||||||
pv("input");
|
|
||||||
for(ll i=1;i<=n;i++){
|
|
||||||
static std::string s;
|
|
||||||
std::cin>>s;
|
|
||||||
ll now=0;
|
|
||||||
for(ll j=0;j<s.size();j++){
|
|
||||||
pv(j);
|
|
||||||
pv(now);
|
|
||||||
pv(s(j));
|
|
||||||
t[now][s(j)].first++;
|
|
||||||
pv(t[now][s(j)].first);
|
|
||||||
if(t[now][s(j)].second==0){
|
|
||||||
t[now][s(j)].second=tot++;
|
|
||||||
}
|
|
||||||
now=t[now][s(j)].second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(ll i=1;i<=q;i++){
|
|
||||||
ll ans=0;
|
|
||||||
static std::string s;
|
|
||||||
std::cin>>s;
|
|
||||||
ll now=0;
|
|
||||||
pv("check");
|
|
||||||
for(ll j=0;j<s.size();j++){
|
|
||||||
pv(j);
|
|
||||||
pv(now);
|
|
||||||
pv(t[now][s(j)].first);
|
|
||||||
if(t[now][s(j)].second==0){
|
|
||||||
break;
|
|
||||||
}else{
|
|
||||||
ans+=t[now][s(j)].first;
|
|
||||||
now=t[now][s(j)].second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::cout<<ans<<'\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(){
|
|
||||||
std::iostream::sync_with_stdio(false);
|
|
||||||
std::cin.tie(nullptr);
|
|
||||||
ll T;
|
|
||||||
std::cin>>T;
|
|
||||||
while(T--){
|
|
||||||
solve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
64
src/test.cpp
64
src/test.cpp
@ -1,4 +1,64 @@
|
|||||||
|
#include <list>
|
||||||
|
class MyLinkedList {
|
||||||
|
public:
|
||||||
|
std::list<int> l;
|
||||||
|
MyLinkedList() {
|
||||||
|
|
||||||
int main(){
|
}
|
||||||
|
|
||||||
}
|
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(){
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user