• 【CF570D】Tree Requests【dsu on tree】


    传送门

    Solution

    一些字母能形成回文串的充要条件是出现奇数次的字母数量(le 1),于是直接维护(w[i][j])表示深度为(i)的点钟,字母(j)出现的次数即可:
    dsu on tree

    Code

    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e5+10;
    int n,m,c[N],cnt,first[N],ans[N];
    struct node{
    	int v,nxt;
    }e[N<<1];
    vector<pair<int,int> > que[N];
    inline void add(int u,int v){e[++cnt].v=v;e[cnt].nxt=first[u];first[u]=cnt;}
    char s[N];
    int dep[N],hson[N],siz[N],w[N][26],son;
    inline void dfs(int u,int f){
    	dep[u]=dep[f]+1;siz[u]=1;
    	for(int i=first[u];i;i=e[i].nxt){
    		int v=e[i].v;
    		if(v==f) continue;
    		dfs(v,u);siz[u]+=siz[v];
    		if(siz[v]>siz[hson[u]]) hson[u]=v;
    	}
    }
    inline void work(int u,int f,int tp){
    	w[dep[u]][c[u]]+=tp;
    	for(int i=first[u];i;i=e[i].nxt){
    		int v=e[i].v;
    		if(v==f||v==son) continue;
    		work(v,u,tp);
    	}
    }
    inline void dsu(int u,int f,int tp){
    	for(int i=first[u];i;i=e[i].nxt){
    		int v=e[i].v;
    		if(v==f||v==hson[u]) continue;
    		dsu(v,u,0); 
    	}
    	if(hson[u]) dsu(hson[u],u,1),son=hson[u];
    	work(u,f,1);son=0;
    	for(int i=0;i<que[u].size();++i){
    		int d=que[u][i].first,q=que[u][i].second;
    		int cnt1=0,cnt2=0;
    		for(int j=0;j<=25;++j)
    			w[d][j]&1?cnt1++:cnt2++;
    		ans[q]=cnt1<=1;
    	}
    	if(!tp) work(u,f,-1);
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=2,f;i<=n;++i)
    		scanf("%d",&f),add(f,i);
    	scanf("%s",s+1);
    	for(int i=1;i<=n;++i)
    		c[i]=s[i]-'a';
    	for(int i=1,a,b;i<=m;++i){
    		scanf("%d%d",&a,&b);
    		que[a].push_back(make_pair(b,i));
    	}
    	dfs(1,0);
    	dsu(1,0,1);
    	for(int i=1;i<=m;++i) puts(ans[i]?"Yes":"No");
    	return 0;
    }
    
  • 相关阅读:
    java多线程(待完善)
    eclipse console 查看全部的输出
    maven仓库地址
    拷贝Maven工程依赖的jar包出来
    ElasticSearch
    python2学习------基础语法5(常用容器以及相关操作)
    文本框焦点事件改变默认文字
    随机更换图片
    妙味——JS数组的方法
    妙味——封装getStyle()获取样式
  • 原文地址:https://www.cnblogs.com/tqxboomzero/p/14255666.html
Copyright © 2020-2023  润新知