楼下那篇题解说实话就是什么都没说,所以我再发一篇正常一点的。

楼下思路大体是正确的,但是之所以是说什么都没说,是因为他有两个比较致命的遗漏。首先是点,这里的点不是平时我们认为的点,如果多少接触过对偶图很容易看出来,这个题实际上要把每个三角形当作点,而把有临边的三角形连边,这样我们就可以大体上得到一棵树,至于怎么连这个边,使用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+树的直径)的更多相关文章

  1. [ZJOI2012]旅游(树的直径)

    [ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...

  2. [ZJOI2012]旅游 对偶图 树的直径

    Code: // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorith ...

  3. P2610 [ZJOI2012]旅游 树的直径

    这个题就是建图不太好建,但是我们一想,三角形貌似只能两两挨着,最后会变成一个二叉树,所以问题就变成求树的直径.建图用pair套map超级简单. 题干: 到了难得的暑假,为了庆祝小白在数学考试中取得的优 ...

  4. [洛谷P2610] [ZJOI2012]旅游

    洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...

  5. 【题解】P2610 [ZJOI2012]旅游

    link 题意 T国的国土可以用一个凸N边形来表示,包含 \(N-2\) 个城市,每个城市都是顶点为 \(N\) 边形顶点的三角形,两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段.问一路能经过 ...

  6. 转 蓝桥杯 历届试题 大臣的旅费 [ dfs 树的直径 ]

    题解: 求树的直径. 转一篇博客:http://www.cnblogs.com/hanyulcf/archive/2010/10/23/tree_radius.html 树的直径是指树的最长简单路.求 ...

  7. codeforces 734E(DFS,树的直径(最长路))

    题目链接:http://codeforces.com/contest/734/problem/E 题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白. 思路:先进 ...

  8. P2610 [ZJOI2012]旅游

    题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出 ...

  9. C - Roads in the North DFS+树的直径

    Building and maintaining roads among communities in the far North is an expensive business. With thi ...

随机推荐

  1. IO-Polling的代码分析

    在前一篇文章<IO-Polling实现分析与性能评測>中提到了IO-Polling与中断的原理差别,并通过两种模式下NVMe SSD的性能測试对两者进行了对照. 这篇文章将深入到IO-Po ...

  2. Python 爬取盗墓笔记的标题,章节,章节名称

    # coding:utf-8import requestsimport jsonfrom bs4 import BeautifulSoup user_agent = 'Mozilla/5.0 (Win ...

  3. Android无线测试之—UiAutomator UiDevice API介绍二

    按键与KEYCODE使用 一.手机常见按键: 1)HOME 主屏幕键 2) MENU 菜单键 3) BACK 返回键 4) VOLUME_UP 音量加键 5) VOLUME_DOWN 音量减键 6) ...

  4. JSON Extractor/jp@gc - JSON Path Extractor 举例2

    测试描述 使用json返回结果做校验 测试步骤 1.配置http请求 2.根据结果树返回的json,取值 { "status_code":200, "message&qu ...

  5. 基于Boost无锁队列实现的内存池

  6. [Docker]学习笔记--简单介绍

    学习docker已经有一段时间了,一直没有静下心来好好总结一下. 最近用docker搭了一整套Gitlab的持续集成环境.(会在下一篇中详细的讲解具体步骤,敬请期待) 感觉是时候写点东西和大家一起分享 ...

  7. 关于JAVA中String类型的最大长度

    前些天看到一道面试题,题目很容易理解:String的长度限制是多少? 针对这个题目,浏览了网友的回答,大概得到了3个层次的答案. 最浅的层次: 近似计算机内存大小的长度.这是作为一个程序员最浅显的回答 ...

  8. iOS10通知框架UserNotifications

    在iOS10上,苹果将原来散落在UIKit中各处的用户通知相关的代码进行重构,剥离,打造了一个全新的通知框架-UserNotifications.笔者最近在开发公司通知相关的需求,跟着WWDC2016 ...

  9. 深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系

    摘自:http://www.cnblogs.com/wangfupeng1988/p/4000798.html:作者:王福朋: 本系列用了大量的篇幅讲解了上下文环境和作用域,有些人反映这两个是一回儿事 ...

  10. ehcache.xml配置详解

    一:配置文件案例 <ehcache> <!-- 磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存 path:指定在硬盘上存储对象的路径 --> ...