AtCoder - 3913 XOR Tree】的更多相关文章

Problem Statement You are given a tree with N vertices. The vertices are numbered 0 through N−1, and the edges are numbered 1 through N−1. Edge i connects Vertex xi and yi, and has a value ai. You can perform the following operation any number of tim…
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值,求使得最终所有边权为0的最小操作次数. \(v \leq 15,n \leq 10^5\) 分析 首先把边权转化为点权.记一个点的点权为与它相连的所有边的边权和.当我们给一条路径上的边异或上某个值时,路径端点的点权被异或了1次,而路径上不是端点的点有两条边被异或了,相当于异或了2次,权值不变.因此…
「AGC035C」 Skolem XOR Tree 感觉有那么一点点上道了? 首先对于一个 \(n\),若 \(n\equiv 3 \pmod 4\),我们很快能够构造出一个合法解如 \(n,n-1,n-2,..,1,n+n,n+n-1,n+n-2,...,n+1\). 若 \(n\equiv 1 \pmod 4\),我们将 \(n,n-1\) 拆分出来单独成一条链. 然后如果 \(n\) 是偶数,可以想到对于这个 \(n\) 单独处理,则剩下的问题转化为我们上面的问题. 考虑对于这个偶数特殊判…
\(\mathcal{Description}\)   Link.   给定一棵树,边 \((u,v)\) 有边权 \(w(u,v)\).每次操作可以使一条简单路径上的边权异或任意非负整数.求最少的操作次数使得所有边边权为 \(0\).   \(n\le10^5\),\(w(u,v)<16\). \(\mathcal{Solution}\)   好妙的题 www.   定义一个点的点权 \(val_u\) 为其所有邻接边边权的异或和,即 \(val_u=\bigoplus_{(u,v)\in E…
可能算是道中规中矩的套路题吧…… Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree with N vertices. The vertices are numbered 0 through N−1, and the edges are numbered 1 through N−1. Edge i connects Vertex xi and yi, and has a value ai.…
题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_d 题解:稍微想一下就知道除了第一次的x是所有的异或值,之后的x都是原先被替换掉的a[i]所以要想可以通过操作得到必须使a[i]里的所有数b[j]里都有 而且数量相同,(a[0]=a[1]^a[2]^..^a[n],b[0]=b[1]^b[2]^..^b[n]).然后就是怎么交换能够使得操作数最少,其实可以用并查集,但是用dfs比较好理解 一点其实都是一样的.显然f[a[i]]=b[i],于是如…
经过长时间的思考,我发现直接考虑对一条链进行修改是很难做出本题的,可能需要换一个方向. 可以发现本题中有操作的存在,是没有可以反过来做的做法的,因此正难则反这条路应该走不通. 那么唯一的办法就是简化这个操作或是转化问题了,不难发现前者应该是后者的基础,于是我们应该先将重心放在前者上. 可以发现本题是对一条链进行同一个操作,那么能否使用差分来使得多点操作变成单点操作呢? 不难发现由于差分的优秀性质是可以的,对于一次修改 \((x, y, k)\),我们只需要要在 \(x, y\) 处分别异或 \(…
Problem \(\mathrm{Code~Festival~2017~Final~J}\) 题意概要:一棵 \(n\) 个节点有点权边权的树.构建一张完全图,对于任意一对点 \((x,y)\),连一条长度为 \(w[x] + w[y]+ dis(x, y)\) 的边.求这张图的最小生成树. \(n\leq 2\times 10^5\) Solution 在操场上晒太阳时想到的做法,求 \(\mathrm{MST}\) 可以使用另一种贪心算法:每次找到每个点连出去的最短的边,并将其合并,一次是…
题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\rightarrow a\&b=0\). 对每个点来说,考虑向右延伸能够满足条件的右端点的位置,显然右端点的位置单调不减,双指针扫一遍即可. 代码如下 #include <cstdio> using namespace std; const int maxn=2e5+10; int n,a[…
Step1:首先定义一个点的权值为与其相连边的异或和.那么修改一条路径,权值改变的只有两个端点.边权都为0和点权都为0实质相同. Step2:那么现在和树的结构就没有什么关系了.每次选两个点,然后同时异或上一个值.求最小次数. Step3:首先权值为0的不用修改了,贪心先把权值一样的两两分组.那么就会剩下至多15个数.因为只有15个数,考虑状压.如果几个数异或值为0,那么显然存在方案n-1次全部消完.那么就可以子集转移. Code #include<bits/stdc++.h> #define…
目录 @description@ @solution - 1@ @accepted code - 1@ @solution - 2@ @accepted code - 2@ @details@ @description@ 给定一个 N 个点的树,第 i 条边连接 ai 与 bi,颜色为 ci,边权为 di. 现有 Q 个询问,每次询问假设将颜色为 xi 的边的边权全部修改为 yi 时,ui 到 vi 这一条路径上的边权和. Constraints 2≤N≤10^5, 1≤Q≤10^5 1≤ai,…
A - Two Integers 如果\(X\)是\(Y\)的倍数的话不存在 可以输出\(X \cdot (\frac{Y}{gcd(X,Y)} - 1)\) 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #…
前言: 因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的. 想了想,就这些天学文化课之余有空就把AtCoder之前那些ARC 的 C D E 什么的刷一下吧(一般是D,可能会有简单一点的E和难一点的C)(可能会很慢,毕竟基本有时间也就周末了) 所以就开了这个坑鞭策一下自己,上个坑是dp的,开了50题,补的巨累...这次吸取教训,只开20题...(也没那么多时间去刷题了) 不会说题意,题意的话可以上网找或者去原站看…
点此进入比赛 \(A\):XOR Circle(点此看题面) 大致题意: 给你\(n\)个数,问是否能将它们摆成一个环,使得环上每个位置都是其相邻两个位置上值的异或值. 先不考虑\(0\),我们假设环上第一个数是\(a_1\),第二个数是\(a_2\),则第三个数\(a_3=a_1\ xor\ a_2\),第四个数\(a_4=a_2\ xor\ a_3=a_1\)... 以此类推,也就是说,一个合法的环上必然是\(a_1,a_2,a_1\ xor\ a_2\)三者重复. 整理一下,就是要满足:…
Preface Atcoder的题都好劲啊,都是我做不动的计数与构造 就当锻炼自己的思维能力了(基本都是bzt教的) A - XOR Circle bzt说这题数据太水了只要判一下所有数异或值是否为\(0\)就能过,但我们要考虑正解(数据太弱我也不知道到底对不对) 首先我们发现放数的时候必然会出现\(a_1\to a_1\operatorname{xor} a_2\to a_2\to a_1\)的情况,即三个数一组的循环 那么我们可以得到一个普遍的结论:只有三种数且每种数字个数相同 然后你直接提…
从这里开始 题目目录 Problem A XOR Circle 你发现,权值的循环节为 $a_0, a_1, a_0\oplus a_1$,然后暴力即可. Code #include <bits/stdc++.h> using namespace std; typedef bool boolean; const int N = 1e5 + 5; int n; int a[N], b[N]; void quitif(boolean condition, const char* vert = &q…
一.关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态.当不确定性太多的时候,我们就需要将它们压进较少的维数内. 常见的状态: 天生二进制(开关.选与不选.是否出现--) 爆搜出状态,给它们编号 1. 状态跟某一个信息集合内的每一条都有关.(如 dp 套 dp) 2. 若干条精简而相互独立的信息压在一起处理. (如每个数字是否出现) 在使用状压 dp 的题目当中,往往能一眼看到一些小数据范围的量,切人点明确.而有些题,这样的量并不明显,需要更深人地分析题目性质才能找到. 二.预备知识…
嗯嗯,这是一道线段树的题,询问区间内亮着的灯的个数,我们可以把区间修改的线段树改一下,原本的求和改成若有奇数次更改则取反(总长度-亮着的灯个数),而判断是否奇数次只要数组加一个delta的值,update的时候delta xor 1 就够了,代码如下. type tpoint=record l,r,sum,delta,mid:longint; end; var n,m,s,e,i,j,c,sum:longint; tree:array[..] of tpoint; procedure build…
A. Square Function 留坑. B. Guess by Remainder 询问$lcm(1,2,3,...,n)-1$即可一步猜出数. 计算$lcm$采用分治FFT即可,时间复杂度$O(n\log^2n)$. C. Subtract if Greater! 对于每个修改操作,$[1,x]$的数无需修改,$[x+1,2x]$的数会减小至少一半,暴力修改即可,$[2x+1,inf]$的数减小之后排名不变,故可以在平衡树上打标记实现. 时间复杂度$O(n\log^2n+m\log n)…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a-b区间中的0变成1,1变成0 3 a b表示a-b区间中的1的数目 4 a b表示a-b区间中最长连续1的长度 解题思路: 线段树多种标记. 需要处理的东西比较多: 做题的时候发现一个问题: 我的宏定义Max不可以用于函数,尤其是递归函数,这样会使得同一函数重复调用好几遍,递归函数的话更会超时. #…
About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep learning engineers are highly sought after, and mastering deep learning will give you numerous new career opportunities. Deep learning is also a new "s…
目录 Contest Info Solutions A. Girls Band Party B. So Easy D. Easy Problem E. XOR Tree F. Function! G. Pot!! H. Delivery Route I. Base62 K. Largest Common Submatrix N. Fibonacci Sequence Contest Info Practice Link Solved A B C D E F G H I J K L M N 9/1…
hdu3397 Sequence operation #include <bits/stdc++.h> using namespace std; ; struct node { /// l,r表示当前结点区间范围[l,r] int l, r; /// val=0时为全0标志,表示区间[l,r]的值全为0 /// val=1时为全1标志,表示区间[l,r]的值全为1 /// val=-1时则代表无操作 /// xor为异或标志,表示区间[l,r]的值取异或操作 int val, Xor; ///…
A. Knapsack 猜个结论--先把所有的东西加起来,如果小于 \(\frac{1}{2}m\) 就输出不合法:如果在 \([\frac{1}{2}m, m]\)之间直接全部输出:若大于 \(m\),那就想办法把他减到 \(m\) 以下并且大于等于 \(\frac{1}{2}m\),那么问题就转化为了求序列减完以后大于等于 \(\frac{1}{2}m\) 的情况下的最小值.那我们排个序,从大到小循环,把当前能减的都减掉就是了. for (int i = n; i; i--) { //fou…
P3879 [TJOI2010]阅读理解 考虑用 Trie 解决 #include<stdio.h> #include<bitset> #include<string.h> #define rep(i,n) for (int i=0; i<n; ++i) int n,m,t=1,cnt=1,l,*p,a[500000][26]; char c[20]; std::bitset<1010>v[500000]; int main() { scanf(&qu…
题目链接:https://atcoder.jp/contests/abc121/tasks/abc121_d 题目很裸(Atcoder好像都比较裸 就给一个区间求异或和 n到1e12 肯定不能O(n)推 那肯定得通过异或的一些性质 用$f\left( a,b\right)$表示[a,b]区间的异或和 我只观察出了$f\left( 2^{a},2^{b}-1\right)$的异或和肯定为0. 通过$f\left( 2^{a},2^{a+1}-1\right)$每一位都会出现偶数次 例如 [4,8)…
[atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Problem Statement There is a tree with N vertices, numbered 1 through N. The i-th of the N−1 edges connects vertices ai and bi. Currently, there are Ai s…
传送门:http://abc070.contest.atcoder.jp/tasks/abc070_d 本题是一个图论问题——树(Tree). 有一棵结点数目为n的无向树.第i条边连接结点ai与bi,权值为ci.给出q次查询,以及一个整数k(1≤k≤n),第j次查询给出两个整数xj,yj(1≤xj,yj≤n),求解结点xj和yj通过结点k的最短路径长度. 树上的路径问题,可以通过DFS解决.以下代码片段计算结点间的路径长度dis. void dfs(int v) { vis[v] = true;…
题目链接:https://atcoder.jp/contests/abc126/tasks/abc126_f 题目大意 给定两个整数 M 和 K ,用小于 2M 的的所有自然数,每个两个,用这些数排成一个长度为 2M+1 的序列,使得序列满足以下条件: 每个自然数只能用 2 次. 设序列为 a,$\forall_{i < j}\ 满足a[i] == a[j]$有 a[i] xor a[i + 1] xor……xor a[j] == K. 问这个序列是否存在,存在则输出任意一个,不存在输出 -1.…
CF1055F Tree and XOR 就是选择两个数找第k大对儿 第k大?二分+trie上验证 O(nlognlogn) 直接按位贪心 维护可能的决策点(a,b)表示可能答案的对儿在a和b的子树中选择 所有可能决策点都贡献这一位是0,看是否<=k 然后更新出下一层的决策点 但是空间太小, 所以要滚动 我的方法: 维护trie节点和控制区间,维护每个区间的元素,维护决策点 注意,(a,b)(b,a)算两个.考虑a!=b时候贡献*=2 #include<bits/stdc++.h> #d…