jzoj 5782 城市猎人

2024-01-18 05:30
文章标签 jzoj 5782 城市猎人

本文主要是介绍jzoj 5782 城市猎人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

这里写图片描述这里写图片描述


题解

–本来是很难,但是总有优秀的大佬加神牛犇活在这个世界上
首先不用n^2枚举a和b,
某位大佬说:
a和b其实就是
1 * (m-i+1),2 * (m-i+1),3 * (m-i+1),4 * (m-i+1)。。。。
(哇,我咋不知道呢QAQ)
那么用并查集建一棵树就好了
树边就是连接他们的 i
然后好像有什么优化?——小树连大树(按秩合并)
最后跑对于每个询问的x和y,跑lca,找到连接他们的所有边的连通时间的最大值
就是答案啦啦啦


代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN=100005;int n,m,q;
int f[MAXN],s[MAXN];
int l[MAXN];
int d[MAXN];int Find(int x){if(x==f[x])return x;d[x]=d[f[x]]+1;return Find(f[x]);
}int lca(int x,int y){if(d[x]<d[y])swap(x,y);while(d[x]>d[y])x=f[x];if(x==y)return x;while(f[x]!=f[y]){x=f[x];y=f[y];}return f[x];
}int final(int x,int y,int d){int ans=0;while(x!=d){ans=max(ans,l[x]);x=f[x];}while(y!=d){ans=max(ans,l[y]);y=f[y];}return ans;
}int main(){freopen("pictionary.in","r",stdin);freopen("pictionary.out","w",stdout);cin>>n>>m>>q;for(int i=1;i<=n;i++){f[i]=i;s[i]=1;}for(int i=1;i<=m;i++){for(int j=2;j*(m-i+1)<=n;j++){int u=Find((j-1)*(m-i+1)),v=Find(j*(m-i+1));if(s[u]<=s[v]){f[u]=v;l[u]=i;s[v]=max(s[u]+1,s[v]);}else{f[v]=u;l[v]=i;s[u]=max(s[v]+1,s[u]);}}}for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",final(x,y,lca(x,y)));}return 0;
}

这篇关于jzoj 5782 城市猎人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618160

相关文章

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

日本2024年铃木亮平主演的电影《城市猎人》

《城市猎人》是由佐藤祐市执导、三岛龙朗担任编剧、铃木亮平主演的动作片,于2024年4月25日上线Netflix。 该片改编自北条司的同名漫画,讲述了负责处理黑社会纠纷的清道夫在寻找失踪的Cosplayer时被卷入巨大阴谋的故事 [2]。 相关星图 查看更多 佐藤佑市导演的电影 共9个词条1294阅读 六个说谎的大学生 《六个说谎的大学生》是由佐藤佑市执导,滨边美波、赤楚卫

jzoj 5770 可爱精灵宝贝

题目 题解 –是区间dp(好像dfs加神秘玄学剪枝也能过?) 首先,我们可以发现这个人走过的位置是一个区域,而且区域内部的精灵要么被抓,要么消失了(总之就是与以后的转移没有关系) 所以,状态定义: f[l][r][t] :当这个人走过区间[l,r],且目前在l处,时间为t时的最大分值 注意,l,r的左右位置要根据大小自己判断 然后我们又发现,现在这个人只有两种方法:左走或右走

[离散化][区间DP]JZOJ 5770 可爱精灵宝贝

日常黑Pokeman Go Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家。最近,他闲得没事组织了一场捉精灵的游戏。游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n。 刚开始玩家在k号房子前。有m个精灵,第i只精灵在第A[i]栋房子前,分值是B[i],以及它在T[i]秒内(含)存在,之后消失。Branimirko可以选择移动至相邻的房子,耗时

[权值线段树]JZOJ 3236 矮人排队

Description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏。白雪公主决心终结这样的生活,所以为他们举办了体育课。 在每节课开始时,矮人必须按他们的身高站队。假定矮人们有高度1,2,...,N(每个人高度互不相同)。然而,由于不健康的生活方式,矮人的智力有所恶化,所以他们没有能力依照自己的高度排序。 因此,白雪公主发

JZOJ 1495. 宝石(附加扫描线讲解)

JZOJ 1495. 宝石 题目大意:给你N个 ( K + 1 ) × ( K + 1 ) (K+1)\times(K+1) (K+1)×(K+1)的正方形以及他们左上角的那个顶点的坐标和它的权值,求最大的覆盖的权值。 这一题可以用二维前缀和做,但是无法拿到满分。 满分做法:扫描线。 假如现在有这么两个长方形,权值都为1(不要问为什么是长方形,这里只是为了方便讲解而已),它们摆放如图: 首

【JZOJ A组】 大逃杀

Description 自从 Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题。 Y 君将地图上的所有地点标号为 1 到 n,地图中有 n − 1 条双向道路连接这些点,通过一条 双向道路需要一定时间,保证从任意一个点可以通过道路到达地图上的所有点。 有些点上可能有资源,Y 君到达一个有资源的点后,可以选择获取资源来使自己的武力值增 加 wi,也可以选择不获取资源。如果 Y 君获取了

[数位dp][斯特林反演] Jzoj P5765 相互再归的鹅妈妈

Description Input Output Sample Input Input 13 1101Input 24 310Input 35 1001 Sample Output Output 11Output 21978Output 3598192244 Data Constraint 对于所有数据,保证

#线段树#JZOJ 1959 最大值

线段树 #include <cstdio>#include <cctype>#include <climits>#include <algorithm>using namespace std;struct node{int w;}tree[400001]; int a[100001],n,m,ans;inline int in(){int ans=0,f=1; char c=getc