约会 Rendezvous

内存限制:128 MiB 时间限制:1000 ms 标准输入输出
 
 

题目描述

给定一个有 nnn 个顶点的有向图,每个顶点有且仅有一条出边。每次询问给出两个顶点 aia_ia​i​​ 和 bib_ib​i​​,求满足以下条件的 xix_ix​i​​ 和 yiy_iy​i​​:

  • 从顶点 aia_ia​i​​ 沿出边走 xix_ix​i​​ 步与从顶点 bib_ib​i​​ 沿出边走 yiy_iy​i​​ 步到达的顶点相同。
  • max(xi,yi)\max(x_i, y_i)max(x​i​​,y​i​​) 最小。
  • 满足以上条件的情况下 min(xi,yi)\min(x_i, y_i)min(x​i​​,y​i​​) 最小。
  • 如果以上条件没有给出一个唯一的解,则还需要满足 xi≥yix_i \ge y_ix​i​​≥y​i​​.

如果不存在这样的 xix_ix​i​​ 和 yiy_iy​i​​,则 xi=yi=−1x_i = y_i = -1x​i​​=y​i​​=−1.

Q:这题是不是非常简单?

A:毒瘤题。

Q:毒瘤出题人?

A:毒瘤出题人。

Q:是不是比较考验码力,打完想对就能A?

A:毒瘤卡常,你没有一点卡常技巧是过不了的。

Q:我卡卡常就能A了是吗?

A:卡dfs 卡你空间,卡你时间,还特别容易爆栈 你需要特别的姿势!

34个测试点,让你绝望

没有看题解过了的毒瘤题

对于我这个蒟蒻,我调了一天,整整一天,

day1 晚上开始码 没有看题解 大约想了想,好像可以建反边跑lca

然后思考它有什么性质,首先题目里保证了只有一个出边,那么相当与保证了每个图都有一个环

想到可以缩点然后无脑lca 然后又想了想 好像环上比较难处理

day1 晚上码完 得了 38分 稍微改了改 28分

day2 重新理了理思路,想到环上可以预处理,但没想到怎么处理,随手打了个单调队列发现不行

得到了3分的好成绩

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define A 600000
  4. using namespace std;
  5. ll head[A],nxt[A],belong[A],ver[A],tot=0,deep[A],dis[A],t,n,m,dfn[A],sta[A],otp=0,num=0,top=0,low[A],f[A][30],cnt=0,ins[A],sum[A],rt[A],bl[A],zuzong[A],fa[A],bl4[A];
  6. vector <ll> scc[251001];
  7. bool flag[A];
  8. void add(ll x,ll y)
  9. {nxt[++tot]=head[x];ver[tot]=y;head[x]=tot;}
  10. inline ll lca(ll x,ll y)
  11. {
  12. if(deep[x]>deep[y])swap(x,y);
  13. for(ll i=t;i>=0;i--)
  14. {
  15. if(deep[x]==deep[y]) break;
  16. if(deep[x]<=deep[f[y][i]]) y=f[y][i];
  17. }
  18. if(x==y) return x;
  19. for(ll i=t;i>=0;i--)
  20. if(f[x][i]!=f[y][i])
  21. x=f[x][i],y=f[y][i];
  22. return f[x][0];
  23. }
  24. void dfs(ll x,ll st,ll t)
  25. {
  26. deep[x]=st,flag[x]=1;bl4[x]=otp;
  27. for(ll i=head[x];i;i=nxt[i])
  28. {
  29. ll y=ver[i];
  30. if(flag[y]) continue;
  31. rt[y]=t;
  32. dis[y]=dis[x]+1;
  33. f[y][0]=x;
  34. dfs(y,st+1,t);
  35. }
  36. return ;
  37. }
  38. ll read()
  39. {
  40. ll f=1,x=0;char c=getchar();
  41. while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
  42. while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  43. return f*x;
  44. }
  45. inline void tarjan(ll x)
  46. {
  47. dfn[x]=low[x]=++num;
  48. sta[++top]=x;ins[x]=1;
  49. for(ll i=head[x];i;i=nxt[i])
  50. {
  51. ll y=ver[i];
  52. if(dfn[y]==0)
  53. {
  54. tarjan(y);
  55. low[x]=min(low[x],low[y]);
  56. }
  57. else if(ins[y])
  58. low[x]=min(low[x],dfn[y]);
  59. }
  60. if(dfn[x]==low[x])
  61. {
  62. ++cnt;
  63. ll yy=0,cis=0,lu;
  64. while(1)
  65. {
  66. yy=sta[top--];
  67. ins[yy]=0;
  68. cis++;
  69. bl4[yy]=cnt;
  70. if(yy==x)
  71. break;
  72. scc[cnt].push_back(yy);
  73. belong[yy]=-1;
  74. //printf("将%lld赋成-1\n",yy);
  75.  
  76. }
  77. if(cis>1) scc[cnt].push_back(x),belong[x]=-1;
  78. else cnt--;
  79. }
  80. }
  81. void tiaotarjan()
  82. {
  83. cout<<"***"<<endl;
  84. for(ll i=1;i<=cnt;i++)
  85. {
  86. for(ll j=0;j<scc[i].size();j++)
  87. {
  88. cout<<scc[i][j]<<" ";
  89. }
  90. if(scc[i].size()) cout<<endl;
  91. }
  92. cout<<"***"<<endl;
  93. }
  94. void tiaos()
  95. {
  96. }
  97. void work()
  98. {
  99. n=read();m=read();
  100. t=log(n)/log(2)+2;
  101. for(ll i=1;i<=n;i++)
  102. {
  103. ll xx=read();
  104. add(xx,i);
  105. //建反图跑tarjan缩点+lca
  106. }
  107. for(ll i=1;i<=n;i++)
  108. if(!dfn[i]) tarjan(i);
  109. top=0;
  110. memset(flag,0,sizeof(flag));
  111. for(ll i=1;i<=cnt;i++)
  112. {
  113. ll size=scc[i].size();otp++;
  114. for(ll ii=0;ii<size;ii++)
  115. {
  116. ll q=scc[i][ii];
  117. for(ll j=head[q];j;j=nxt[j])
  118. {
  119. ll y=ver[j];
  120. if(belong[y]!=-1)
  121. {
  122. rt[y]=q;
  123. dfs(y,1,rt[y]);
  124. f[y][0]=y;
  125. }
  126. }
  127. }
  128. }
  129. for(ll j=1;j<=t;j++)
  130. for(ll i=1;i<=n;i++)
  131. f[i][j]=f[f[i][j-1]][j-1];
  132. /*for(ll i=1;i<=n;i++)
  133. {
  134. if(belong[i]!=-1)
  135. {
  136. printf("i=%lld rt=%lld deep=%lld\n",i,rt[i],deep[i]);
  137. }
  138. }*/
  139. for(ll i=1;i<=m;i++)
  140. {
  141. ll xx=read(),yy=read();
  142. if(bl4[xx]==bl4[yy])
  143. {
  144. ll lc=lca(xx,yy);
  145. //printf("rtx=%lld rty=%lld\n",rt[xx],rt[yy]);
  146. if(rt[xx]==rt[yy])
  147. {
  148. printf("%lld %lld\n",dis[xx]-dis[lc],dis[yy]-dis[lc]);
  149. }
  150. if(rt[xx]!=rt[yy])
  151. {
  152. ll de1=deep[xx],de2=deep[yy];
  153. ll now=bl4[rt[xx]];
  154. ll size=scc[now].size(),ott=0;
  155. bool kais=0;
  156. for(ll ii=0;ii<size*2-1;ii++)
  157. {
  158. if(ii>size)
  159. {
  160. ll j=ii-size;
  161. if(!kais&&(scc[now][ii]==rt[xx]||scc[now][ii]==rt[yy]))
  162. {
  163. kais=1;
  164. }
  165. else if(kais==1)
  166. {
  167. de1<de2?de1++:de2++;
  168. if(scc[now][ii]==rt[xx]||scc[now][ii]==rt[yy])
  169. {
  170. kais=0;
  171. break;
  172. }
  173. }
  174. }
  175. else
  176. {
  177. if(!kais&&(scc[now][ii]==rt[xx]||scc[now][ii]==rt[yy]))
  178. {
  179. kais=1;
  180. }
  181. else if(kais==1)
  182. {
  183. de1<de2?de1++:de2++;
  184. if(scc[now][ii]==rt[xx]||scc[now][ii]==rt[yy])
  185. {
  186. kais=0;
  187. break;
  188. }
  189. }
  190. }
  191. }
  192. printf("%lld %lld\n",de1,de2);
  193. }
  194. }
  195. else
  196. printf("-1 -1\n");
  197. }
  198. }
  199. int main()
  200. {work();}

和同学讨论这个题发现他们也挺艰难的

day2 下午 然后经过艰难的辨认+艰难的手膜得到以下代码

  1.           ll lx,ly,bl=belong[ances[x]],rootx=ances[x],rooty=ances[y],disx=deep[x]-deep[rootx],disy=deep[y]-deep[rooty],xy,yx;
  2. for(ll j=0;j<scc[bl].size();j++)
  3. {
  4. if(scc[bl][j]==rootx) lx=j;
  5. if(scc[bl][j]==rooty) ly=j;
  6. }
  7. if(lx<ly)
  8. xy=ly-lx,yx=sz[bl]-(ly-lx);
  9. else
  10. yx=lx-ly,xy=sz[bl]-(lx-ly);
  11. if(max(disx+xy,disy)<max(disx,disy+yx)) printf("%lld %lld\n",disx+xy,disy);
  12. else if(max(disx+xy,disy)>max(disx,disy+yx)) printf("%lld %lld\n",disx,disy+yx);
  13. else
  14. {
  15. if(min(disx+xy,disy)<min(disx,disy+yx)) printf("%lld %lld\n",disx+xy,disy);
  16. else if(min(disx+xy,disy)>min(disx,disy+yx)) printf("%lld %lld\n",disx,disy+yx);
  17. else if(disx+xy>=disy) printf("%lld %lld\n",disx+xy,disy);
  18. else printf("%lld %lld\n",disx,disy+yx);
  19. }

然后TLE了

得知tarjan一定会被卡死

然后改成了dfs(??????)

终于吧MLE整过了之后,就接着TLE

经过几个小时卡常斗争终于A了

  1. #include<bits/stdc++.h>
  2. #define ll int
  3. #define A 510000
  4. const int L=1<<20|1;
  5. char buffer[L],*S,*T;
  6. #define getchar() ((S==T&&(T=(S=buffer)+fread(buffer,1,L,stdin),S==T))?EOF:*S++)
  7. using namespace std;
  8. ll head[A],nxt[A],belong[A],ver[A],tot=0,deep[A],t,n,m,otp=0,num=0,f[A][22],cnt=0,bl[A],ances[A],last,sz[A],v[A],cixu[A],chushi=0;
  9. inline ll find(ll x)
  10. {if(ances[x]==x) return x;return ances[x]=find(ances[x]);}
  11. inline void add(ll x,ll y)
  12. {nxt[++tot]=head[x];ver[tot]=y;head[x]=tot;}
  13. inline ll lca(ll x,ll y)
  14. {
  15. if(deep[x]>deep[y])swap(x,y);
  16. ll w;
  17. for(w=0;(1<<w)<=deep[y];w++);
  18. w--;
  19. for(ll i=w;i>=0;i--)
  20. {
  21. if(deep[x]==deep[y]) break;
  22. if(deep[x]<=deep[f[y][i]]) y=f[y][i];
  23. }
  24. if(x==y) return x;
  25. for(ll i=t;i>=0;i--)
  26. if(f[x][i]!=f[y][i])
  27. x=f[x][i],y=f[y][i];
  28. return f[x][0];
  29. }
  30. inline void dfs(ll x,ll pre)
  31. {
  32. v[x]=++num;
  33. deep[x]=deep[pre]+1;
  34. // printf("%lld \n",deep[x]);
  35. for(ll i=1;(1<<i)<=deep[x];i++)
  36. f[x][i]=f[f[x][i-1]][i-1];
  37. for(ll i=head[x];i;i=nxt[i])
  38. {
  39. ll y=ver[i];
  40. if(v[y]>last)
  41. {
  42. cnt++;
  43. chushi=0;
  44. cixu[x]=++chushi;
  45. sz[cnt]++;
  46. belong[x]=cnt;
  47. ances[x]=x;
  48. for(ll i=x;i!=y;i=f[i][0])
  49. {
  50. cixu[f[i][0]]=++chushi;
  51. belong[f[i][0]]=cnt;
  52. ances[f[i][0]]=f[i][0];
  53. sz[cnt]++;
  54. }
  55. }
  56. else
  57. {
  58. ances[y]=f[y][0]=x
  59. ,dfs(y,x);
  60. }
  61. }
  62. }
  63. inline ll Read(){
  64. register ll ret;
  65. register char r;
  66. while(r=getchar(),r<'0'||r>'9');ret=r-48;
  67. while(r=getchar(),r>='0'&&r<='9')ret=ret*10+r-48;
  68. return ret;
  69. }
  70. inline void work()
  71. {
  72. last=0;
  73. n=Read();m=Read();
  74. t=log(n)/log(2)+1;
  75. for(ll i=1;i<=n;i++)
  76. {
  77. ll xx=Read();
  78. add(xx,i);
  79. }
  80. for(ll i=1;i<=n;i++)
  81. if(!v[i])
  82. {
  83. ances[i]=f[i][0]=i;
  84. dfs(i,0);
  85. last=num;
  86. }
  87. for(ll i=1;i<=m;i++)
  88. {
  89. ll x=Read(),y=Read();
  90. if(find(x)!=find(y)&&belong[ances[x]]!=belong[ances[y]]) printf("-1 -1\n");
  91. else
  92. {
  93. if(ances[x]==ances[y])
  94. {
  95. ll lc=lca(x,y);
  96. printf("%d %d\n",deep[x]-deep[lc],deep[y]-deep[lc]);
  97. }
  98. else
  99. {
  100. ll lx,ly,bl=belong[ances[x]],disx=deep[x]-deep[ances[x]],disy=deep[y]-deep[ances[y]],xy,yx;
  101. lx=cixu[ances[x]];ly=cixu[ances[y]];
  102. if(lx<ly)
  103. xy=ly-lx,yx=sz[bl]-(ly-lx);
  104. else
  105. yx=lx-ly,xy=sz[bl]-(lx-ly);
  106. if(max(disx+xy,disy)<max(disx,disy+yx)) printf("%d %d\n",disx+xy,disy);
  107. else if(max(disx+xy,disy)>max(disx,disy+yx)) printf("%d %d\n",disx,disy+yx);
  108. else
  109. {
  110. if(min(disx+xy,disy)<min(disx,disy+yx)) printf("%d %d\n",disx+xy,disy);
  111. else if(min(disx+xy,disy)>min(disx,disy+yx)) printf("%d %d\n",disx,disy+yx);
  112. else if(disx+xy>=disy) printf("%d %d\n",disx+xy,disy);
  113. else printf("%d %d\n",disx,disy+yx);
  114. }
  115. }
  116. }
  117. }
  118. }
  119. main()
  120. {work();}

具体思路

首先我们会发现图中一定存在环而且仅仅存在一个环,可能有多个可分割的图,每个图都有一个环

我们要建反图,这样我们就可以跑lca了

然后我们模拟就完了,对于同一个图上的有如下情况

一.路径不经过环

lca完了

二.路径经过环

我们发现我们缩点时其实是按照一定顺序缩的,事实上是按照逆边顺序缩的

于是我们维护一个类似于dfn序的东西就完了

只在环上维护dfn序,相减就得到了距离

对于不在一个图上的直接-1 -1

  1. #include<bits/stdc++.h>
  2. #define ll int
  3. #define A 510000
  4. const int L=1<<20|1;
  5. char buffer[L],*S,*T;
  6. #define getchar() ((S==T&&(T=(S=buffer)+fread(buffer,1,L,stdin),S==T))?EOF:*S++)
  7. using namespace std;
  8. ll head[A],nxt[A],belong[A],ver[A],tot=0,deep[A],t,n,m,otp=0,num=0,f[A][22],cnt=0,bl[A],ances[A],last,sz[A],v[A],cixu[A],chushi=0;
  9. inline ll find(ll x)
  10. {if(ances[x]==x) return x;return ances[x]=find(ances[x]);}
  11. inline void add(ll x,ll y)
  12. {nxt[++tot]=head[x];ver[tot]=y;head[x]=tot;}
  13. inline ll lca(ll x,ll y)
  14. {
  15. if(deep[x]>deep[y])swap(x,y);
  16. ll w;
  17. for(w=0;(1<<w)<=deep[y];w++);
  18. w--;
  19. for(ll i=w;i>=0;i--)
  20. {
  21. if(deep[x]==deep[y]) break;
  22. if(deep[x]<=deep[f[y][i]]) y=f[y][i];
  23. }
  24. if(x==y) return x;
  25. for(ll i=t;i>=0;i--)
  26. if(f[x][i]!=f[y][i])
  27. x=f[x][i],y=f[y][i];
  28. return f[x][0];
  29. }
  30. inline void dfs(ll x,ll pre)
  31. {
  32. v[x]=++num;
  33. deep[x]=deep[pre]+1;
  34. // printf("%lld \n",deep[x]);
  35. for(ll i=1;(1<<i)<=deep[x];i++)
  36. f[x][i]=f[f[x][i-1]][i-1];
  37. for(ll i=head[x];i;i=nxt[i])
  38. {
  39. ll y=ver[i];
  40. if(v[y]>last)
  41. {
  42. cnt++;
  43. chushi=0;
  44. cixu[x]=++chushi;
  45. sz[cnt]++;
  46. belong[x]=cnt;
  47. ances[x]=x;
  48. for(ll i=x;i!=y;i=f[i][0])
  49. {
  50. cixu[f[i][0]]=++chushi;
  51. belong[f[i][0]]=cnt;
  52. ances[f[i][0]]=f[i][0];
  53. sz[cnt]++;
  54. }
  55. }
  56. else
  57. {
  58. ances[y]=f[y][0]=x
  59. ,dfs(y,x);
  60. }
  61. }
  62. }
  63. inline ll Read(){
  64. register ll ret;
  65. register char r;
  66. while(r=getchar(),r<'0'||r>'9');ret=r-48;
  67. while(r=getchar(),r>='0'&&r<='9')ret=ret*10+r-48;
  68. return ret;
  69. }
  70. inline void work()
  71. {
  72. last=0;
  73. n=Read();m=Read();
  74. t=log(n)/log(2)+1;
  75. for(ll i=1;i<=n;i++)
  76. {
  77. ll xx=Read();
  78. add(xx,i);
  79. }
  80. for(ll i=1;i<=n;i++)
  81. if(!v[i])
  82. {
  83. ances[i]=f[i][0]=i;
  84. dfs(i,0);
  85. last=num;
  86. }
  87. for(ll i=1;i<=m;i++)
  88. {
  89. ll x=Read(),y=Read();
  90. if(find(x)!=find(y)&&belong[ances[x]]!=belong[ances[y]]) printf("-1 -1\n");
  91. else
  92. {
  93. if(ances[x]==ances[y])
  94. {
  95. ll lc=lca(x,y);
  96. printf("%d %d\n",deep[x]-deep[lc],deep[y]-deep[lc]);
  97. }
  98. else
  99. {
  100. ll lx,ly,bl=belong[ances[x]],disx=deep[x]-deep[ances[x]],disy=deep[y]-deep[ances[y]],xy,yx;
  101. lx=cixu[ances[x]];ly=cixu[ances[y]];
  102. if(lx<ly)
  103. xy=ly-lx,yx=sz[bl]-(ly-lx);
  104. else
  105. yx=lx-ly,xy=sz[bl]-(lx-ly);
  106. if(max(disx+xy,disy)<max(disx,disy+yx)) printf("%d %d\n",disx+xy,disy);
  107. else if(max(disx+xy,disy)>max(disx,disy+yx)) printf("%d %d\n",disx,disy+yx);
  108. else
  109. {
  110. if(min(disx+xy,disy)<min(disx,disy+yx)) printf("%d %d\n",disx+xy,disy);
  111. else if(min(disx+xy,disy)>min(disx,disy+yx)) printf("%d %d\n",disx,disy+yx);
  112. else if(disx+xy>=disy) printf("%d %d\n",disx+xy,disy);
  113. else printf("%d %d\n",disx,disy+yx);
  114. }
  115. }
  116. }
  117. }
  118. }
  119. main()
  120. {work();}

约会Rendezvous的更多相关文章

  1. 「POI2012」约会 Rendezvous

    #2691. 「POI2012」约会 Rendezvous 这题我简直不想说什么了,什么素质,卡常数…… “每个顶点有且仅有一条出边”,所以是一道基环树的题,首先tarjan缩点,在缩完点后的图上求a ...

  2. 约会 Rendezvous:基环树

    提炼:tarjan判环,dfs建树,倍增lca,预处理环两点间距离 我犯的错误: 1.基环树不只有一棵,可以有很多 2.自环不能将其忽略,(对于我的算法)应该将其特殊考虑在算法内 3.代码一定要简洁有 ...

  3. 暑期集训日志(Day0~Day5)

    章·五:2019-07-15:明月不谙离恨苦,斜光到晓穿朱户 ·昨日小结: 昨天考试又是爆零边缘,除了难过就剩难过了. T1暴力打崩了只拿了5分. T2没给分时间.最后20分钟打了个残码.没仔细观察数 ...

  4. TensorFlow中的通信机制——Rendezvous(一)本地传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在TensorFlow源码中我们经常能看到一个奇怪的词——Rendezvous ...

  5. [Exchange 2013]创建约会和会议

    简介 会议和约会之间的重要区别是,会议有与会者,并且没有约会.约会和会议可以是单实例或属于重复序列,但与会者. 房间或资源中不包括约会,因为它们不需要发送一条消息.在内部,Exchange 使用相同的 ...

  6. POJ1061青蛙的约会[扩展欧几里得]

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108911   Accepted: 21866 Descript ...

  7. rqnoj378 约会计划

    题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间的关系及其复杂,cc必须严格 ...

  8. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  9. PAT 1014. 福尔摩斯的约会 (20)

    大侦探福尔摩斯接到一张奇怪的字条:"我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm".大侦 ...

随机推荐

  1. .NET平台系列5 .NET Core 简介

    系列目录     [已更新最新开发文章,点击查看详细] 自1995年互联网战略日以来最雄心勃勃的事业 -- 微软.NET战略, 2000年6月30日. 微软公司于2002年2月13日正式推出第一代.N ...

  2. 新代(Syntec)机床的IP设置

    一.前言 通过以太网来做机床联网数据采集时,第一步通常是设置机床的IP和找网口 二.机床IP如何设置? 步骤一.找到设置IP的界面 [维护]>[网络设定] 步骤二.设置IP 设定[IP地址取得方 ...

  3. ES6中的Set和Map对象数据结构

    set对象数据结构 构建某一类型的对象 -对象的实例化 let arr = [1, 2, 3, 3, 4, 5] let rec = new Set(arr)//可以传参数,数组或者对象 consol ...

  4. [c++] STL 标准算法

    _if 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using names ...

  5. X Sever —— Xorg

    X Sever -- Xorg  发表于 2020-03-20 分类于 系统服务 , Xorg 阅读次数:39 阅读次数:48 本文字数: 7k 阅读时长 ≈ 6 分钟 Xorg:基于X11协议的服务 ...

  6. 有没有一种组合字体,中文是宋体,英文是times new roman?

    有没有一种组合字体,中文是宋体,英文是times new roman? 由于日常科研工作书写需要,想问问各位大神有没有一种字体,中文是宋体,西文是times new roman,这样写论文好方便啊有没 ...

  7. SSL数字证书颁发

    一.数字证书 1.数字证书实际上是存在于计算机上的一个记录,是由CA签发的一个声明,证明证书主体("证书申请者"拥有了证书后即成为"证书主体")与证书中所包含的 ...

  8. 028.Python面向对象继承(单继承,多继承,super,菱形继承)

    一 继承的概念 种类 单继承 多继承 至少两个类: 子类:一个类继承另外一个类,那么该类是子类(也叫作衍生类) 父类:另外一个,这个被继承的类,叫做父类(也叫作超类),object 在python中 ...

  9. 解决mysql无法远程连接的问题

    前言 最近开发中遇到一个问题,mysql在服务器本地可以登录,但是远程通过3306端口却不可以.这个问题困扰了我一周之久,终于在今天解决了.在解决的过程中试了很多的方法,遂记录下来,希望能给大家一些提 ...

  10. Nacos源码结构和AP模式注册中心实现介绍

    前言 NacosAP模式源码分析目录 微服务下的注册中心如何选择 Nacos使用和注册部分源码介绍 Nacos服务心跳和健康检查源码介绍 Nacos服务发现 Nacos源码结构介绍 Nacos版本基于 ...