cf14D Two Paths(树的直径)
题意:
N个点构成一棵树。树枝的长度都是1。
在当中找两条不相交【没有公共点】的路,使得二者长度之积最大。
(2 ≤ n ≤ 200)
思路:
一开始思路好麻烦,好麻烦,好麻烦,,,,,,,而且WA,,,,,
正解:
必定存在第三条路径连接两条最长路径。【因为是一棵树】。
去掉第三条路径上的某根树枝就可以将原树分成两个区域了,两条最长路径分别在一个区域里。
然后分别求两个区域的直径,相乘。
N不大,枚举。
代码:
int const N=210; int n;
vector<int> G[N];
int g[N][N];
queue<int> Q;
int vis[N]; void Input(){
cin>>n; mem(g,0);
rep(i,1,n) G[i].clear(); rep(i,1,n-1){
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
g[a][b]=1;
g[b][a]=1;
}
} int path(int x){ //从x出发,求直径
mem(vis,-1);
while(!Q.empty()) Q.pop();
Q.push(x);
vis[x]=0;
while(!Q.empty()){
int u=Q.front(); Q.pop();
int L=G[u].size();
rep(i,0,L-1){
int v=G[u][i];
if(g[u][v]==1 && vis[v]==-1){
vis[v]=vis[u]+1;
Q.push(v);
}
}
}
int ans=-1;
int vv=-1;
rep(i,1,n){
if(vis[i]>ans){
ans=vis[i];
vv=i;
}
}
while(!Q.empty()) Q.pop();
mem(vis,-1);
Q.push(vv);
vis[vv]=0;
while(!Q.empty()){
int u=Q.front(); Q.pop();
int L=G[u].size();
rep(i,0,L-1){
int v=G[u][i];
if(g[u][v]==1 && vis[v]==-1){
vis[v]=vis[u]+1;
Q.push(v);
}
}
}
ans=-1;
rep(i,1,n){
if(vis[i]>ans){
ans=vis[i];
}
}
return ans;
}
void Solve(){
int ans=0;
rep(i,1,n-1){
rep(j,i+1,n){
if(g[i][j]==1){
g[i][j]=g[j][i]=0;
int x1=path(i);
int x2=path(j);
ans=max(ans,x1*x2);
g[i][j]=g[j][i]=1;
}
}
}
printf("%d\n",ans);
} int main(){ Input();
Solve();
return 0;
}
cf14D Two Paths(树的直径)的更多相关文章
- 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 ...
- Codeforces 14D Two Paths 树的直径
题目链接:点击打开链接 题意:给定一棵树 找2条点不反复的路径,使得两路径的长度乘积最大 思路: 1.为了保证点不反复,在图中删去一条边,枚举这条删边 2.这样得到了2个树,在各自的树中找最长链.即树 ...
- Codeforces--14D--Two Paths(树的直径)
Two Paths Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit ...
- CodeForces 14D 树的直径 Two Paths
给出一棵树,找出两条不相交即没有公共点的路径,使得两个路径的长度的乘积最大. 思路:枚举树中的边,将该边去掉,分成两棵树,分别求出这两棵树的直径,乘起来维护一个最大值即可. #include < ...
- TTTTTTTTTTTTT 树的直径 Codeforces Beta Round #14 (Div. 2) D. Two Paths
tiyi:给你n个节点和n-1条边(无环),求在这个图中找到 两条路径,两路径不相交,求能找的两条路径的长度的乘积最大值: #include <iostream> #include < ...
- Gym - 100676H Capital City(边强连通分量 + 树的直径)
H. Capital City[ Color: Black ]Bahosain has become the president of Byteland, he is doing his best t ...
- Park Visit(树的直径)
传送门 Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- codeforces 14D(搜索+求树的直径模板)
D. Two Paths time limit per test 2 seconds memory limit per test 64 megabytes input standard input o ...
- poj2631 求树的直径裸题
题目链接:http://poj.org/problem?id=2631 题意:给出一棵树的两边结点以及权重,就这条路上的最长路. 思路:求实求树的直径. 这里给出树的直径的证明: 主要是利用了反证法: ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
随机推荐
- 1.26学习总结——css盒子模型
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
- Django学习day01随堂笔记
每日测验 """ 每日测验 1.你所知道的前端框架和实用插件有哪些,他们各有什么特点 2.使用bootstrap需要注意什么,常用的bootstrap样式有哪些 &quo ...
- 让PHP能够调用C的函数-FFI扩展
在大型公司中,一般会有很我编程语言的配合.比如说让 Java 来做微服务层,用 C++ 来进行底层运算,用 PHP 来做中间层,最后使用 JS 展现效果.这些语言间的配合大部分都是通过 RPC 来完成 ...
- Linux系列(41) - 监听命令Vmstart,Top(还需完善)
一.简介 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控:属于sysstat包:它是对系统的整体情况进行统计 ...
- P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】
正题 题目链接:https://www.luogu.com.cn/problem/P4022 题目大意 给出\(m\)个模板串. 然后\(n\)次询问给出一个串\(S\)要求找到一个最大的\(L\)使 ...
- Unittest 框架之测试固件-----(setUp与tearDown)你真的会用吗?
前言 做自动化测试中,需要管理大量的测试用例,如果不用框架管理用例,那会是一件很麻烦的事. 如果所示只写了一个用例,内容就是输入网易邮箱账号和密码 test fixture:测试固件 简单来说就是做一 ...
- 宝塔配置vnc+wine实现Q群机器人
图形界面必备X Window System yum -y groupinstall "X Window System" 安装epel源 yum -y install epel-re ...
- a标签的href属性拼接问题
<a id="nickName" href="/community/user/userinfo?nickName="></a> 如上所示 ...
- CSP初赛考点汇总
qwq 为SCP初赛选手(我)收集的各种定理qwq 更新: 1.为了初赛都能用,不限于定理了 2.主旨为在短时间内复习各算法,备初赛 3.请确定你学习(学懂了)了 \(\texttt{oi}\) 的基 ...
- NOIP 模拟二 考试总结
SDOI2015 排序 今天看到这道题,没有一点思路,暴力都没的打...还是理解错题意了,操作不同位置不是说改不同的区间,而是不同操作的顺序...考场上如果知道这个的话最少暴力拿一半啊,因为正解本来就 ...