[ZJOI2012]旅游 对偶图 树的直径
Code:
// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<string>
#include<cmath>
using namespace std;
void setIO(string a){
freopen((a+".in").c_str(),"r",stdin);
freopen((a+".out").c_str(),"w",stdout);
}
void shutIO(){
fclose(stdin),fclose(stdout);
}
#define O2 __attribute__((optimize("-O3")))
#define maxn 300000
#define P pair<int,int>
map<P,int>key;
vector<int>G[maxn];
int idx,nodes,ans;
O2 void insert(int a,int b,int i){
if(!key[P(a,b)]) key[P(a,b)]=key[P(b,a)]=++idx;
int cur=key[P(a,b)];
G[cur].push_back(i);
}
int head[maxn], to[maxn<<1],nex[maxn<<1],cnt, d1[maxn],d2[maxn];
O2 void addedge(int u,int v){
nex[++cnt]=head[u],head[u]=cnt,to[cnt]=v;
}
O2 void dfs(int u,int fa){
d1[u]=d2[u]=0;
for(int v=head[u];v;v=nex[v]){
if(to[v]==fa) continue;
dfs(to[v],u);
if(d1[to[v]]>d1[u]) d2[u]=d1[u],d1[u]=d1[to[v]];
else if(d1[to[v]]>d2[u]) d2[u]=d1[to[v]];
}
ans=max(ans,d1[u]+d2[u]+1);
++d1[u],++d2[u];
}
O2 int main(){
//setIO("shop");
int n;
scanf("%d",&n);
for(nodes=1;nodes<=n-2;++nodes){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(abs(a-b)!=1)insert(a,b,nodes);
if(abs(a-c)!=1)insert(a,c,nodes);
if(abs(b-c)!=1)insert(b,c,nodes);
}
for(int i=1;i<=idx;++i){
int siz=G[i].size()-1;
for(int j=0;j<siz;++j)
addedge(G[i][j],G[i][j+1]),addedge(G[i][j+1],G[i][j]);
}
dfs(1,0);
printf("%d",ans);
//shutIO();
return 0;
}
[ZJOI2012]旅游 对偶图 树的直径的更多相关文章
- [ZJOI2012]旅游(树的直径)
[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...
- BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口 ...
- P2610 [ZJOI2012]旅游 树的直径
这个题就是建图不太好建,但是我们一想,三角形貌似只能两两挨着,最后会变成一个二叉树,所以问题就变成求树的直径.建图用pair套map超级简单. 题干: 到了难得的暑假,为了庆祝小白在数学考试中取得的优 ...
- 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)
题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...
- VIJOS1476旅游规划[树形DP 树的直径]
描述 W市的交通规划出现了重大问题,市政府下决心在全市的各大交通路口安排交通疏导员来疏导密集的车流.但由于人员不足,W市市长决定只在最需要安排人员的路口安放人员.具体说来,W市的交通网络十分简单,它包 ...
- [洛谷P2610] [ZJOI2012]旅游
洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...
- 树的直径,LCA复习笔记
前言 复习笔记第6篇. 求直径的两种方法 树形DP: dfs(y); ans=max( ans,d[x]+d[y]+w[i] ); d[x]=max( d[x],d[y]+w[i] ); int di ...
- 【题解】P2610 [ZJOI2012]旅游
link 题意 T国的国土可以用一个凸N边形来表示,包含 \(N-2\) 个城市,每个城市都是顶点为 \(N\) 边形顶点的三角形,两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段.问一路能经过 ...
- poj2631 求树的直径裸题
题目链接:http://poj.org/problem?id=2631 题意:给出一棵树的两边结点以及权重,就这条路上的最长路. 思路:求实求树的直径. 这里给出树的直径的证明: 主要是利用了反证法: ...
随机推荐
- php设计模式之责任链模式
php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...
- AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A Single Source Shortest Path In ...
- js 拼接字符串,table等
var userTableStr=''; userTableStr +='<table width="750" height="33" border=&q ...
- 向Vue实例混入plusready
(function () { var onPlusReady = function (callback, context = this) { if (window.plus) { callback.c ...
- php 添加redis扩展
我主要是按照http://blog.163.com/fan_xy_qingyuan/blog/static/1889877482014111111283265/ 这篇博客来的,但是这篇博客里只有php ...
- js邮箱,汉字,数字 表单验证
//电子邮箱验证 function isEmail(str) { var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_ ...
- ZBrush功能特性之变形
使用ZBrush内置的变形功能可以让用户对三维网格轻松应用扭曲.拉伸.弯曲及其他各种变化.在ZBrush当中,有超过20种的强大变形类型,可以应用于任何轴向.用户只需单击几次即可创造出高级形状,如图所 ...
- 线段树(segment tree )
http://www.cnblogs.com/TenosDoIt/p/3453089.html 写的非常好! 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很 ...
- vue反向代理解决跨域
问题描述 在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http ...
- C语言计算字符串数组中每个字符串出现的个数
unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ...