原题

题意:

一个多边形,三角剖分,求一条对角线最多能经过多少三角形

题解:

因为不涉及坐标之类的,所以根几何肯定一点关系都没有。

我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于这两个三角形之间有边。然后因为是多边形的三角剖分,所以最后只会有n-1条边。这样我们得到的就是一棵树了!

然后呢,因为我们要求的是任意一条对角线经过最多的城市个数,显然,这就是要求树上最长的一条路径,也就是树的直径了!

至于O(log)连边 ,考虑用pair将边和所属编号记录在map里,查询时连边即可(因为一条边最多被覆盖两次,所以想变快可以在该边被覆盖后将map中erase)

洛谷不开O2很慢……开O2很快……

#include<cstdio>
#include<queue>
#include<map>
#include<cstring>
#define N 200010
#define MP(x,y) make_pair(x,y)
using namespace std;
int n,dep[N],t,cnt=1,head[N];
queue <int> q;
bool vis[N];
map < pair<int,int> , int > mp;
struct hhh
{
int to,next;
}edge[2*N]; int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
} void add(int u,int v)
{
edge[cnt].to=v;edge[cnt].next=head[u];head[u]=cnt++;
edge[cnt].to=u;edge[cnt].next=head[v];head[v]=cnt++;
} int bfs(int s)
{
dep[s]=1;
memset(vis,0,sizeof(vis));
vis[s]=1;
int mx=0;
q.push(s);
while (!q.empty())
{
int r=q.front();
q.pop();
if (dep[r]>mx) t=r,mx=dep[r];
for (int i=head[r];i;i=edge[i].next)
{
if (vis[edge[i].to]) continue;
q.push(edge[i].to);
vis[edge[i].to]=1;
dep[edge[i].to]=dep[r]+1;
}
}
return mx;
} int main()
{
n=read();
for (int i=1,a,b,c;i<n-1;i++)
{
a=read(),b=read(),c=read();
if (mp[MP(min(a,b),max(a,b))]) add(mp[MP(min(a,b),max(a,b))],i);
else mp[MP(min(a,b),max(a,b))]=i;
if (mp[MP(min(a,c),max(a,c))]) add(mp[MP(min(a,c),max(a,c))],i);
else mp[MP(min(a,c),max(a,c))]=i;
if (mp[MP(min(c,b),max(b,c))]) add(mp[MP(min(c,b),max(b,c))],i);
else mp[MP(min(c,b),max(b,c))]=i;
}
bfs(1);
printf("%d\n",bfs(t));
return 0;
}

[bzoj] 2657 ZJOI2012 旅游 || bfs的更多相关文章

  1. 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)

    题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...

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

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

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

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

  4. bzoj 2657 旅游

    Written with StackEdit. Description 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将\(T\)国作为他们 ...

  5. BZOJ2657:[ZJOI2012]旅游——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2657 https://www.luogu.org/problemnew/show/P2610 到了难 ...

  6. bzoj 2815 [ZJOI2012]灾难(构造,树形DP)

    [题意] 求把每个点删除后,不可达点的数目. [思路] 构造一棵“灭绝树”,要求这棵树满足如果删除根节点后则该子树内的所有结点都不可达.则答案为子树大小-1. 如何构造这棵“灭绝树”? 将原图拓扑排序 ...

  7. BZOJ 1086 王室联邦 | BFS

    BZOJ 1086 王室联邦 题意 把一棵树分块,每块大小在[B, 3B]之间(B由输入数据给出),每个块需要对应一个核心点,核心点可以在块内,这个点要满足块内每个点到核心点的路径上的点都属于这个块( ...

  8. [bzoj2657][Zjoi2012]旅游 journey_ 对偶图_树形dp

    旅游 bzoj-2657 Zjoi-2012 题目大意:题目链接 注释:$1\le K\le 2\cdot 10^5$. 想法:这题... 感觉和上一个题的提示有些类似,就是题目生怕你不知道这是一道对 ...

  9. @bzoj - 2658@ [Zjoi2012]小蓝的好友(mrx)

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事 ...

随机推荐

  1. AFD运维

    1.afd 网址:https://www.dwd.de/AFD/html-en/contents.html 2.问题:拷贝了一个主机A配置后(HOST_CONFIG主机项),修改为另一个主机B配置:然 ...

  2. Ruby基础教程 1-10

    类结构 1.数值类结构     Fixnum到Bignum会自动转换   2.常用数值表示   3. ans=10.divmod(3) ans[0]是商  ans[1]是余数   4.实例方法roun ...

  3. iWebShop安装教程

    要进行iWebShop测试,要先在本地电脑上安装iWebShop运行环境,之后再安装iWebShop程序,接下来我就一步步讲解,如何安装iWebShop程序. ##一.运行环境搭建 这里我推荐新手使用 ...

  4. ADO.NET基础学习-----四种模型,防止SQL注入

    1.ExcuteNonQuery 执行非查询语句,返回受影响的行数. // 1.ExcuteNonQuery string sqlconn = "Data Source=wss;Initia ...

  5. 【cookie接口】- jmeter - (请求提示no cookie)

    1.虽然 请求成功 响应码 200  ,但是  返回code 1  ,表示接口不成功 2.加入 空的cookie 管理器就可以了  返回 code 0 注意:状态码 200 只是表示请求是成功的 , ...

  6. 干货来袭:Redis5.0支持的新功能说明

    Redis5.0支持的新特性说明 本文内容来自华为云帮助中心 华为云DCS的Redis5.x版本继承了4.x版本的所有功能增强以及新的命令,同时还兼容开源Redis5.x版本的新增特性. Stream ...

  7. 名人问题 算法解析与Python 实现 O(n) 复杂度 (以Leetcode 277. Find the Celebrity为例)

    1. 题目描述 Problem Description Leetcode 277. Find the Celebrity Suppose you are at a party with n peopl ...

  8. LeetCode - 326, 342, 231 Power of Three, Four, and Two

    1. 问题 231. Power of Two: 判断一个整数是否是2的n次方,其中n是非负整数 342. Power of Four: 判断一个整数是否是4的n次方,其中n是非负整数 326. Po ...

  9. Nodejs基础之redis

    安装redis 模块 npm install redis 1 代码部分 const redis = require('redis') const client = redis.createClient ...

  10. [C++] in-class initializer

    C++11 introduced serveral contructor-related enhancements including: Class member initializers Deleg ...