[bzoj] 2657 ZJOI2012 旅游 || bfs
原题
题意:
一个多边形,三角剖分,求一条对角线最多能经过多少三角形
题解:
因为不涉及坐标之类的,所以根几何肯定一点关系都没有。
我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于这两个三角形之间有边。然后因为是多边形的三角剖分,所以最后只会有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的更多相关文章
- 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)
		
题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...
 - [洛谷P2610] [ZJOI2012]旅游
		
洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...
 - [ZJOI2012]旅游(树的直径)
		
[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示 ...
 - bzoj 2657 旅游
		
Written with StackEdit. Description 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将\(T\)国作为他们 ...
 - BZOJ2657:[ZJOI2012]旅游——题解
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2657 https://www.luogu.org/problemnew/show/P2610 到了难 ...
 - bzoj 2815 [ZJOI2012]灾难(构造,树形DP)
		
[题意] 求把每个点删除后,不可达点的数目. [思路] 构造一棵“灭绝树”,要求这棵树满足如果删除根节点后则该子树内的所有结点都不可达.则答案为子树大小-1. 如何构造这棵“灭绝树”? 将原图拓扑排序 ...
 - BZOJ 1086 王室联邦 | BFS
		
BZOJ 1086 王室联邦 题意 把一棵树分块,每块大小在[B, 3B]之间(B由输入数据给出),每个块需要对应一个核心点,核心点可以在块内,这个点要满足块内每个点到核心点的路径上的点都属于这个块( ...
 - [bzoj2657][Zjoi2012]旅游 journey_ 对偶图_树形dp
		
旅游 bzoj-2657 Zjoi-2012 题目大意:题目链接 注释:$1\le K\le 2\cdot 10^5$. 想法:这题... 感觉和上一个题的提示有些类似,就是题目生怕你不知道这是一道对 ...
 - @bzoj - 2658@ [Zjoi2012]小蓝的好友(mrx)
		
目录 @description@ @solution@ @accepted code@ @details@ @description@ 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事 ...
 
随机推荐
- 第5章 Linux网络编程基础
			
第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...
 - Unity编辑器 - DragAndDrop拖拽控件
			
Unity编辑器 - DragAndDrop拖拽控件 Unity编辑器的拖拽(DragAndDrop)在网上能找到的资料少,自己稍微研究了一下,写了个相对完整的案例,效果如下 代码: object d ...
 - 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
			
此篇文章是对上一篇文章(http://www.ifiero.com/index.php/archives/611)的进一步补充,主要说明如何适配Apple的最新三款手机iPhoneXs.iPhoneX ...
 - Siki_Unity_3-13_编程内功修炼-算法
			
Unity 3-13 编程内功修炼 -- 算法 任务1&2:课程介绍 主要算法: 分治法 堆排序 二叉树 动态规划 贪心算法 图 任务3:分治算法 -- Divide and Conquer ...
 - HDU - 3415(DP + 单调队列)
			
链接:HDU - 3415 题意:给出一个包含 n 个数的环,求满足长度大于 0 小于等于 k 的最大区间和. 题解:将数组加倍,形成环.求一个前缀和sum.枚举每一个sum[i],以 i 结尾的最大 ...
 - 搭建hexo博客并部署到github上
			
hexo是由Node.js驱动的一款快速.简单且功能强大的博客框架,支持多线程,数百篇文章只需几秒即可生成.支持markdown编写文章,可以方便的生成静态网页托管在github上. 感觉不错. 前端 ...
 - 深入理解 Vuejs 动画效果
			
本文主要归纳在 Vuejs 学习过程中对于 Vuejs 动画效果的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 V ...
 - C#二次封装虹软arc研究
			
相信很多用C#又想用虹软的SDK的童鞋要花很多心思去研究怎么转换,所以写了一篇文章和一个demo方便用C#的童鞋方便调用虹软的接口, 文章的地址是:https://blog.xgcos.com/sho ...
 - 【机器学习】多项式回归python实现
			
[机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 使用python实现多项式回归,没有使用sklearn等机器学习框架,目的是帮助理解算 ...
 - 科普:PCI-E插槽都有哪些样子?
			
主板上的扩展插槽曾经是多种多样的,例如曾经非常流行的组合就是PCI插槽搭配AGP插槽,其中AGP插槽主要用在显卡上,而PCI插槽的用途则更广一些,不仅有用在显卡上,还能用于扩展其它设备,如网卡.声卡. ...