题意:

N个点构成一棵树。树枝的长度都是1。

在当中找两条不相交【没有公共点】的路,使得二者长度之积最大。

(2 ≤ n ≤ 200)

思路:

一开始思路好麻烦,好麻烦,好麻烦,,,,,,,而且WA,,,,,

正解:

必定存在第三条路径连接两条最长路径。【因为是一棵树】。

去掉第三条路径上的某根树枝就可以将原树分成两个区域了,两条最长路径分别在一个区域里。

然后分别求两个区域的直径,相乘。

N不大,枚举。

代码:

  1. int const N=210;
  2.  
  3. int n;
  4. vector<int> G[N];
  5. int g[N][N];
  6. queue<int> Q;
  7. int vis[N];
  8.  
  9. void Input(){
  10. cin>>n;
  11.  
  12. mem(g,0);
  13. rep(i,1,n) G[i].clear();
  14.  
  15. rep(i,1,n-1){
  16. int a,b;
  17. scanf("%d%d",&a,&b);
  18. G[a].push_back(b);
  19. G[b].push_back(a);
  20. g[a][b]=1;
  21. g[b][a]=1;
  22. }
  23. }
  24.  
  25. int path(int x){ //从x出发,求直径
  26. mem(vis,-1);
  27. while(!Q.empty()) Q.pop();
  28. Q.push(x);
  29. vis[x]=0;
  30. while(!Q.empty()){
  31. int u=Q.front(); Q.pop();
  32. int L=G[u].size();
  33. rep(i,0,L-1){
  34. int v=G[u][i];
  35. if(g[u][v]==1 && vis[v]==-1){
  36. vis[v]=vis[u]+1;
  37. Q.push(v);
  38. }
  39. }
  40. }
  41. int ans=-1;
  42. int vv=-1;
  43. rep(i,1,n){
  44. if(vis[i]>ans){
  45. ans=vis[i];
  46. vv=i;
  47. }
  48. }
  49. while(!Q.empty()) Q.pop();
  50. mem(vis,-1);
  51. Q.push(vv);
  52. vis[vv]=0;
  53. while(!Q.empty()){
  54. int u=Q.front(); Q.pop();
  55. int L=G[u].size();
  56. rep(i,0,L-1){
  57. int v=G[u][i];
  58. if(g[u][v]==1 && vis[v]==-1){
  59. vis[v]=vis[u]+1;
  60. Q.push(v);
  61. }
  62. }
  63. }
  64. ans=-1;
  65. rep(i,1,n){
  66. if(vis[i]>ans){
  67. ans=vis[i];
  68. }
  69. }
  70. return ans;
  71. }
  72. void Solve(){
  73. int ans=0;
  74. rep(i,1,n-1){
  75. rep(j,i+1,n){
  76. if(g[i][j]==1){
  77. g[i][j]=g[j][i]=0;
  78. int x1=path(i);
  79. int x2=path(j);
  80. ans=max(ans,x1*x2);
  81. g[i][j]=g[j][i]=1;
  82. }
  83. }
  84. }
  85. printf("%d\n",ans);
  86. }
  87.  
  88. int main(){
  89.  
  90. Input();
  91. Solve();
  92. return 0;
  93. }

cf14D Two Paths(树的直径)的更多相关文章

  1. Codeforces Beta Round #14 (Div. 2) D. Two Paths 树的直径

    题目链接: http://codeforces.com/contest/14/problem/D D. Two Paths time limit per test2 secondsmemory lim ...

  2. Codeforces 14D Two Paths 树的直径

    题目链接:点击打开链接 题意:给定一棵树 找2条点不反复的路径,使得两路径的长度乘积最大 思路: 1.为了保证点不反复,在图中删去一条边,枚举这条删边 2.这样得到了2个树,在各自的树中找最长链.即树 ...

  3. Codeforces--14D--Two Paths(树的直径)

     Two Paths Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit ...

  4. CodeForces 14D 树的直径 Two Paths

    给出一棵树,找出两条不相交即没有公共点的路径,使得两个路径的长度的乘积最大. 思路:枚举树中的边,将该边去掉,分成两棵树,分别求出这两棵树的直径,乘起来维护一个最大值即可. #include < ...

  5. TTTTTTTTTTTTT 树的直径 Codeforces Beta Round #14 (Div. 2) D. Two Paths

    tiyi:给你n个节点和n-1条边(无环),求在这个图中找到 两条路径,两路径不相交,求能找的两条路径的长度的乘积最大值: #include <iostream> #include < ...

  6. Gym - 100676H Capital City(边强连通分量 + 树的直径)

    H. Capital City[ Color: Black ]Bahosain has become the president of Byteland, he is doing his best t ...

  7. Park Visit(树的直径)

    传送门 Park Visit Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. codeforces 14D(搜索+求树的直径模板)

    D. Two Paths time limit per test 2 seconds memory limit per test 64 megabytes input standard input o ...

  9. poj2631 求树的直径裸题

    题目链接:http://poj.org/problem?id=2631 题意:给出一棵树的两边结点以及权重,就这条路上的最长路. 思路:求实求树的直径. 这里给出树的直径的证明: 主要是利用了反证法: ...

  10. poj1985 Cow Marathon (求树的直径)

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 3195   Accepted: 1596 Case ...

随机推荐

  1. 一文看懂String类中的常用方法

    1.int length(): 返回字符串的长度: return value.length 2.char charAt(int index): 返回某索引处的字符return value[index] ...

  2. 在树莓派用C#+Winform实现传感器监测

    最近学校里发了个任务,说要做一个科技节小发明,然后我就掏出我的树莓派准备大干一场. 调料 Raspberry Pi 3B+ 树莓派GPIO扩展板 3.5寸电容触摸屏(GPIO接口) 土壤湿度传感器(G ...

  3. Vue组件封装之无限滚动列表

    无限滚动列表:分为单步滚动和循环滚动两种方式 <template> <div class="box" :style="{width:widthX,hei ...

  4. 远程线程注入突破SESSION 0

    远程线程注入突破SESSION 0 SESSION 0 隔离 在Windows XP.Windows Server 2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Se ...

  5. PHP中使用DOMDocument来处理HTML、XML文档

    其实从PHP5开始,PHP就为我们提供了一个强大的解析和生成XML相关操作的类,也就是我们今天要讲的 DOMDocument 类.不过我估计大部分人在爬取网页时还是会喜欢用正则去解析网页内容,学了今天 ...

  6. Docker系列(1) - Centos8.X安装Docker

    环境准备 需要会Linux的基础 Centos8.x 使用Xshell连接远程服务器 环境查看 #系统内核是4.18以上 [root@localhost ~]# uname -r 4.18.0-305 ...

  7. Shell系列(33) - 多分支if语句简介及计算器例子

    多分支if条件语句 if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] then 当条件判断式2成立时,执行程序2 ...省略更多条件... els ...

  8. xmind使用技巧

    xmind看似每个人都会使用,但是掌握一些小技巧,能够有效提升工作效率. 多行复制粘贴 在xmind中选中多行,复制然后可以直接粘贴到excel.word当中. 在excel.word选中多行,复制然 ...

  9. TP框架中的一些登录代码分享

    <?php namespace Admin\Controller;use Think\Controller;class LoginController extends Controller{ p ...

  10. redis代替mybatis做缓存

    将redis作为缓存 <dependencies> <dependency> <groupId>org.springframework.boot</group ...