标签:return scan int 愚蠢 LCAAAAA fa lst lca
很愤怒!特别愤怒!超级愤怒!!!
我LCA居然错了!!而且是那种特别愚蠢的错误
我把代码都交错了!!!
silasila
话不多说,代码上特别详细了
1 #include<bits/stdc++.h> 2 #define FOR(i,a,b) for(register int i=a;i<=b;i++) 3 #define ROF(i,a,b) for(register int i=a;i>=b;i--) 4 using namespace std; 5 const int N=100000+10; 6 int n,m,s; 7 int scan() 8 { 9 int as=0,f=1; 10 char c=getchar(); 11 while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();} 12 while(c>='0'&&c<='9'){as=(as<<3)+(as<<1)+c-'0';c=getchar();} 13 return as*f; 14 } 15 struct ss 16 { 17 int now,next; 18 }b[N*2]; 19 int num=1; 20 int deep[N],fa[N][22],lg[N],head[N]; 21 void add(int x,int y) 22 { 23 num++; 24 b[num].next =head[x]; 25 b[num].now=y; 26 head[x]=num; 27 } 28 void dfs(int f,int father) 29 { 30 deep[f]=deep[father]+1;//根节点的深度 31 fa[f][0]=father;//表明该f的最直接祖先是father 32 for(int i=1;(1<<i)<=deep[f];i++)//小于该深度啊... 33 { 34 fa[f][i]=fa[fa[f][i-1]][i-1];//他的祖先是祖先的祖先啊,我们是从 35 //上往下走的,所以关于他的祖先的祖先也是早就求出来的 36 } 37 for(int i=head[f];i;i=b[i].next)//找儿子!! 38 { 39 int j=b[i].now ; 40 if(j!=father) 41 dfs(b[i].now,f);//找儿子,木有毛病啊 42 } 43 } 44 int lca(int x,int y) 45 { 46 if(deep[x]<deep[y]) 47 swap(x,y);//是x成为层数深的那个 48 ROF(i,20,0) 49 { 50 if(deep[fa[x][i]]>=deep[y]) x=fa[x][i]; 51 if(x==y) return x;//此时就找到了!! 52 } 53 // if(x==y) return x;//此时就找到了!! 54 for(int k=20;k>=0;k--) 55 { 56 if(fa[x][k]!=fa[y][k])//父亲不同就同时往上跳 57 { 58 x=fa[x][k]; 59 y=fa[y][k]; 60 } 61 } 62 return fa[x][0];//此时xy的父节点相同,所以该点直接的父亲结点就是LCA 63 } 64 int main() 65 { 66 // freopen("lca.in","r",stdin); 67 // freopen("lca.out","w",stdout); 68 n=scan(); 69 FOR(i,1,n) 70 { 71 int x,y; 72 x=scan(); 73 if(x==0) {s=i;} 74 add(x,i); 75 //add(i,x);//储存撒 76 } 77 dfs(s,0);//s是0结点的儿子.. 78 m=scan(); 79 int lst=0; 80 FOR(i,1,m) 81 { 82 int x,y; 83 x=scan();y=scan();x=x^lst;y=y^lst; 84 lst=lca(x,y); 85 printf("%d\n",lst); 86 } 87 return 0; 88 }
silasila
标签:return,scan,int,愚蠢,LCAAAAA,fa,lst,lca 来源: https://www.cnblogs.com/KSTT/p/10374975.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。