CF914E Palindromes in a Tree】的更多相关文章

$ \color{#0066ff}{ 题目描述 }$ 给你一颗 n 个顶点的树(连通无环图).顶点从 1 到 n 编号,并且每个顶点对应一个在'a'到't'的字母. 树上的一条路径是回文是指至少有一个对应字母的排列为回文. 对于每个顶点,输出通过它的回文路径的数量. 注意:从u到v的路径与从v到u的路径视为相同,只计数一次. \(\color{#0066ff}{输入格式}\) 第一行包含一个整数n(2<=n<=2*10^5). 接下来的 n-1 行,每行包含两个整数u和v(1<=u,v&…
link 题目大意:给定一个n个点的树,每个点都有一个字符(a-t,20个字符) 我们称一个路径是神犇的,当这个路径上所有点的字母的某个排列是回文 求出对于每个点,求出经过他的神犇路径的数量 题解: 对于回文串,我们发现最多允许1个字母出现了奇数次,和%2有关 并且由于只有20个字母,说到20我就想起了二进制状压,我们对于一条链状压成20维的01向量,表示某个字符出现的次数是奇数还是偶数 说到树上静态问题我就想起淀粉质 我们考虑静态淀粉质,对于当前的树我们找出他的重心rt,然后对于每个子树DFS…
题面 洛谷 CF 题解 题意:给你一颗 n 个顶点的树(连通无环图).顶点从 1 到 n 编号,并且每个顶点对应一个在'a'到't'的字母. 树上的一条路径是回文是指至少有一个对应字母的排列为回文. 对于每个顶点,输出通过它的回文路径的数量. 注意:从u到v的路径与从v到u的路径视为相同,只计数一次 性质:回文字符串至多一个字母次数为奇数 因为字母只有'a'~'t' 那么可以状压一下 然后就是套点分治就好了 注意:顶点经过的次数要除以2(因为每条路径算了两次) Code #include<bit…
[题目]E. Palindromes in a Tree [题意]给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数.n<=2*10^5. [算法]点分治 [题解]状压20位的二进制表示一条路径的字符状态,点分治过程中维护扫描过的路径只须维护状态桶数组,t[i]表示前面状态为i的路径条数. 合并:考虑当前状态为j,要使合并的状态满足条件即i^j=1<<k(0<=k<20)或i^j=0,移项得i=j^(1<…
You are given a tree (a connected acyclic undirected graph) of n vertices. Vertices are numbered from 1 to n and each vertex is assigned a character from a to t. A path in the tree is said to be palindromic if at least one permutation of the labels i…
https://vjudge.net/problem/CodeForces-914E 点分就没一道不卡常的? 卡常记录: 1.把不知道为什么设的(unordered_map)s换成了(int[])s 2.减少一次cal2和clr #pragma GCC optimize("Ofast") #include<cstdio> #include<algorithm> #include<cstring> #include<vector> usin…
n<=100000的树,每个点上有个字母a-t之一,问有多少这样的链经过每个点:它的某一个排列的字母串起来是回文的. 就是有最多一个字母是奇数个啦..这样点分算一波即可..细节较多详见代码 #include<string.h> #include<stdlib.h> #include<stdio.h> #include<math.h> #include<algorithm> //#include<queue> //#include…
考试注意事项:link1 link2 (密码:wangle) 调不出来bug,可以先透彻一会儿或者是上个厕所或者坐一会别的题(间隔至少20min),然后通读代码 -1. 考试先读题,读题之后搞出一个做题规划 做一些duliu题,人脑内存不够时,把纸和笔当内存用 不要相信你的人脑内存 /2是向零取整,如果写权值线段树需要开负数下标,那么一定要用>>1而不是/2(这个在FFT上没啥区别,但是开负数下标就GG了)(MloVtry的咸鱼树) upd:会炸int就 (cl + (long long)cr…
Tree Palindromes Given a tree rooted at node 1 with N nodes, each is assigned a lower case latin character. Print the sum of length of longest palindrome substring from string generated by simple path from root to all other nodes i.e root to some oth…
树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c之间的距离就是树的直径. 用dfs也可以. 模板: ; int head[N]; int dis[N]; bool vis[N]; ,b,mxn=; struct edge { int to,w,next; }edge[N]; void add_edge(int u,int v,int w) { e…