CCF 网络延时 100分

痛定思痛。 2023-07-25 09:47 64阅读 0赞

题目传送门:http://118.190.20.162/view.page?gpid=T24

  1. 使用两次Dijkstra,第一次从节点1出发,找到距离1最远的节点,设为U。再从U出发,找到距离U最远的节点,设为V。

答案就是从U到V的距离,也就是第二次Dijkstra得到的dis[v]。

提示:数组的长度应该是20000,而不是10000。应该是N+M。

  1. #include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<string>
  5. #include<vector>
  6. #include<queue>
  7. #include<set>
  8. using namespace std;
  9. const int MAXN = 20004;
  10. const int INF = 100000000;
  11. struct Choose{
  12. int u;
  13. int dis;
  14. Choose(int u,int dis){
  15. this->u = u;
  16. this->dis = dis;
  17. }
  18. bool operator<(const Choose &choose)const {
  19. return this->dis > choose.dis;
  20. }
  21. };
  22. vector<int> adj[MAXN];
  23. int dis[MAXN];
  24. bool vis[MAXN];
  25. priority_queue<Choose> que;
  26. int Dijkstra(int s,int n){
  27. fill(dis,dis+n+1,INF);
  28. dis[s] = 0;
  29. que.push(Choose(s,dis[s]));
  30. for(int i=1;i<=n;i++){
  31. int u = -1;
  32. do{
  33. if(!que.empty()){
  34. u = que.top().u;
  35. que.pop();
  36. }else{
  37. break;
  38. }
  39. }while(vis[u]);
  40. if(u == -1){
  41. return -1;
  42. }
  43. vis[u] = true;
  44. for(int j=0;j<adj[u].size();j++){
  45. int v = adj[u][j];
  46. if(!vis[v]){
  47. if(dis[v] > dis[u] + 1){
  48. dis[v] = dis[u] + 1;
  49. que.push(Choose(v,dis[v]));
  50. }
  51. }
  52. }
  53. }
  54. int maxDis = -1;
  55. int u = -1;
  56. for(int i=1;i<=n;i++){
  57. if(maxDis < dis[i]){
  58. u = i;
  59. maxDis = dis[i];
  60. }
  61. }
  62. return u;
  63. }
  64. int main(){
  65. int n,m;
  66. int u,v;
  67. cin>>n>>m;
  68. for(int v=2;v<=n;v++){
  69. cin>>u;
  70. adj[u].push_back(v);
  71. adj[v].push_back(u);
  72. }
  73. for(int v=n+1;v<=n+m;v++){
  74. cin>>u;
  75. adj[u].push_back(v);
  76. adj[v].push_back(u);
  77. }
  78. n += m;
  79. u = Dijkstra(1,n);
  80. fill(vis,vis+n+1,false);
  81. int index = Dijkstra(u,n);
  82. cout<<dis[index]<<endl;
  83. return 0;
  84. }

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CCF 网络

    一、试题 问题描述   给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换机