P2610 【[ZJOI2012]旅游】(dfs+树的直径)
楼下那篇题解说实话就是什么都没说,所以我再发一篇正常一点的。
楼下思路大体是正确的,但是之所以是说什么都没说,是因为他有两个比较致命的遗漏。首先是点,这里的点不是平时我们认为的点,如果多少接触过对偶图很容易看出来,这个题实际上要把每个三角形当作点,而把有临边的三角形连边,这样我们就可以大体上得到一棵树,至于怎么连这个边,使用map和pair进行操作,具体说来很麻烦,可以上网某度以下。
建完图了之后,不难看出,我们要的结果就是建出来的这个树的最长链,然后就是找到一个最长链的端点的问题。由于这是一棵树,所以我们可以通过dfs或bfs求出其中的一个端点,然后从这个端点再来一次,求出的最大深度就是我们要的答案。由于这个题的数据限制,所以虽然这么建完图之后spfa绝对不慢,可是还是会T2~3个点,虽然你想A掉可以开O2优化,但是还是希望用搜索搜索出来。还有一个,不要cin,这个必T无疑,除非你开O2.。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<iomanip>
#include<map>
#define re register
#define ll long long
using namespace std;
struct po
{
int nxt,to,dis;
};
map<pair<int,int>,int> m;
po edge[];
int q[],head[],dis[],b[],temp[][];
int n,s,t,r,st,to,ans,maxx,num;
inline int read()
{
int x=,c=;
char ch=' ';
while((ch<''||ch>'')&&ch!='-')ch=getchar();
while(ch=='-')c*=-,ch=getchar();
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*c;
}
inline void add_edge(int from,int to,int dis)
{
edge[++num].nxt=head[from];
edge[num].to=to;
edge[num].dis=dis;
head[from]=num;
}
inline void finish(int id,int x,int y)
{
int s=m[make_pair(x,y)];
if(s)
{
add_edge(s,id,);
add_edge(id,s,);
m.erase(m.find(make_pair(x,y)));
}else
m[make_pair(x,y)]=id;
}
inline void spfa(int x)
{
memset(dis,,sizeof(dis));
memset(b,,sizeof(b));
int front=,tail=;
dis[x]=;
q[tail]=x;
b[x]=;
while(front<tail)
{
int now=q[++front];
b[now]=;
for(re int i=head[now];i;i=edge[i].nxt)
{
int u=edge[i].to;
if(dis[u]>edge[i].dis+dis[now])
{
dis[u]=edge[i].dis+dis[now];
if(!b[u])
{
b[u]=;
q[++tail]=u;
}
}
}
}
}
inline void bfs(int x)
{
memset(b,,sizeof(b));
int front=,tail=;
temp[tail][]=x;
temp[tail][]=;
b[x]=;
while(front<tail)
{
int now=temp[++front][];
int dep=temp[front][];
if(dep>maxx)
{
st=now;
maxx=dep;
}
for(re int i=head[now];i;i=edge[i].nxt)
{
int u=edge[i].to;
if(!b[u])
{
b[u]=;
temp[++tail][]=u;
temp[tail][]=dep+;
}
}
}
}
int main()
{
n=read();
for(re int i=;i<=n-;i++)
{
s=read();t=read();r=read();
if(s>t)
swap(s,t);
if(s>r)
swap(s,r);
if(t>r)
swap(t,r);
finish(i,s,t);
finish(i,s,r);
finish(i,t,r);
} bfs();
maxx=;
bfs(st);
cout<<maxx;
}
P2610 【[ZJOI2012]旅游】(dfs+树的直径)的更多相关文章
- [ZJOI2012]旅游(树的直径)
[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...
- [ZJOI2012]旅游 对偶图 树的直径
Code: // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorith ...
- P2610 [ZJOI2012]旅游 树的直径
这个题就是建图不太好建,但是我们一想,三角形貌似只能两两挨着,最后会变成一个二叉树,所以问题就变成求树的直径.建图用pair套map超级简单. 题干: 到了难得的暑假,为了庆祝小白在数学考试中取得的优 ...
- [洛谷P2610] [ZJOI2012]旅游
洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...
- 【题解】P2610 [ZJOI2012]旅游
link 题意 T国的国土可以用一个凸N边形来表示,包含 \(N-2\) 个城市,每个城市都是顶点为 \(N\) 边形顶点的三角形,两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段.问一路能经过 ...
- 转 蓝桥杯 历届试题 大臣的旅费 [ dfs 树的直径 ]
题解: 求树的直径. 转一篇博客:http://www.cnblogs.com/hanyulcf/archive/2010/10/23/tree_radius.html 树的直径是指树的最长简单路.求 ...
- codeforces 734E(DFS,树的直径(最长路))
题目链接:http://codeforces.com/contest/734/problem/E 题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白. 思路:先进 ...
- P2610 [ZJOI2012]旅游
题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出 ...
- C - Roads in the North DFS+树的直径
Building and maintaining roads among communities in the far North is an expensive business. With thi ...
随机推荐
- spring mvc3.1 @ResponseBody注解生成大量Accept-Charset
Spring3 MVC使用@ResponseBody后会产生非常大的响应头(Accept-Charset会达到4K+).原因在于默认情况下StringHttpMessageConverter.writ ...
- Windows10环境vagrant+VirtualBox虚拟机无法创建私有网络的解决方案。
报错信息 ==> default: Clearing any previously set network interfaces...There was an error while execu ...
- jqgrid 事件说明
Events(事件) 事件响应动作被设置为表格的属性,以下定义了行被选中时的响应: var lastSel; jQuery("#gridid").jqGrid({ ... o ...
- 线性期望(BUPT2015校赛.F)
将整体期望分成部分期望来做. F. network 时间限制 3000 ms 内存限制 65536 KB 题目描述 A social network is a social structure mad ...
- Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决
Quartz是一款定时任务调度的开源框架,使用起来比较方便.并且Spring的support包对Quartz有集成.但是笔者在web应用使用的过程中却遇到了内存泄漏的问题. 问题的产生 笔者在使用Sp ...
- 巨蟒python全栈开发linux之centos4
1.linux虚拟环境1-4 2.linux运行crm代码
- JS replace()方法替换变量(可以对变量进行全文替换)
转至:http://blog.sina.com.cn/s/blog_6552200b0102ve60.html 事情是这样的: 我要用 JS 替换一个多行文本的关键字 正常,没有变量的时候应该是这样: ...
- 解决table插入tr错位
table中用JavaScript插入隐藏(即display="none";)的tr时,别用display="block";换成display="&q ...
- Django视图views--白话聊Django系列
继续看上图,讲完控制器后,我们接下来看看视图部分 客户发来请求,首先经过控制器,然后到达视图,所以视图负责接收请求和作出响应,所以在视图里只需要关注两个:HttpRequest和HttpRespons ...
- 常用模块一(random模块、time模块、sys模块)
一.random模块 import random # 1 取随机小数 应用:数学计算 ret = random.random() # 大于0且小于1之间的小数 print(ret) # 0.53559 ...