COGS 2274. [HEOI 2016] tree
生活随笔
收集整理的這篇文章主要介紹了
COGS 2274. [HEOI 2016] tree
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
★☆?? 輸入文件:heoi2016_tree.in?? 輸出文件:heoi2016_tree.out???簡單對比
時間限制:1 s?? 內存限制:128 MB
?
這道題數據弱到炸了 。
第一次做用樹刨在鏈上找 A了。
第二次邊都沒連,直接賦值找爸爸 A了。。
屠龍寶刀點擊就送
#include <ctype.h> #include <cstdio> #define M 100005void read(int &x) {x=0;bool f=0;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=1;ch=getchar();}while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}x=f?(~x)+1:x; } struct Edge {int next,to;Edge (int next=0,int to=0) :next(next),to(to){} }edge[M<<1]; int tim,cnt,fa[M],top[M],dep[M],belong[M],size[M],sign[M],N,Q,head[M]; void add(int u,int v) {edge[++cnt]=Edge(head[u],v);head[u]=cnt; } void dfs1(int x) {size[x]=1;dep[x]=dep[fa[x]]+1;for(int i=head[x];i;i=edge[i].next){int v=edge[i].to;if(fa[x]!=v){fa[v]=x;dfs1(v);size[x]+=size[v];}} } void dfs2(int x) {belong[x]=++tim;int t=0;if(!top[x]) top[x]=x;for(int i=head[x];i;i=edge[i].next){int v=edge[i].to;if(fa[x]!=v&&size[t]<size[v]) v=t; }if(t) top[t]=top[x],dfs2(t);for(int i=head[x];i;i=edge[i].next){int v=edge[i].to;if(fa[x]!=v&&v!=t) dfs2(v);} } int Chain_query(int x) {for(;x;x=fa[x])if(sign[x]) return x; } int main() {freopen("heoi2016_tree.in","r",stdin);freopen("heoi2016_tree.out","w",stdout);read(N);read(Q);sign[1]=1;for(int x,y,i=1;i<N;i++){read(x);read(y);fa[y]=x;} // dfs1(1); // dfs2(1);char str[5];for(int x;Q--;){scanf("%s",str+1);read(x);if(str[1]=='C') sign[x]=1;else{if(sign[x]) printf("%d\n",x);else printf("%d\n",Chain_query(x));}}return 0; }?
轉載于:https://www.cnblogs.com/ruojisun/p/7197479.html
總結
以上是生活随笔為你收集整理的COGS 2274. [HEOI 2016] tree的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存不足导致mysql关闭,CentOS
- 下一篇: 多对多的属性对应表如何做按照类别的多属性