[Kruskal重构树][主席树] Luogu P4197 Peaks

给一个 N 个点的无向图,每个点有一个高度,每条边有一个困难度。

多次询问求从 Vi 出发,只经过困难度小于等于 Xi 的边所能到达的点中第 K 高的点。

Kruskal 重构树真是个好东西,既好写又好用。

这道题把树建出来后就变成了求某个点的叶子结点中第 K 大的点。

上面说的某个点就是 V在树中向上跳能跳到的点权 <= Xi 的点,

这个东西显然可以用倍增来求。

因为是求第 K 大,所以还要套一个主席树。

 1 #include<bits/stdc++.h>
 2 #define rep(i,a,b) for(register int i=a;i<=b;++i)
 3 #define rpd(i,a,b) for(register int i=a;i>=b;--i)
 4 #define rep1(i,x) for(register int i=head[x];i;i=nxt[i])
 5 typedef long long ll;
 6 const int N=5e5+5,M=5e5+5;
 7 using namespace std;
 8 inline int read(){
 9     int x=0,f=1;char ch=getchar();
10     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
11     while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
12     return x*f;
13 }
14 struct edge{int x,y,z;}e[M];
15 bool cmp(edge i,edge j){return i.z<j.z;}
16 int n,m,Q,tot,cnt,sum,rt;
17 int H[N],bing[N<<1],head[N<<1],to[N<<1],nxt[N<<1],w[N<<1],h[N],Ls[N],Rs[N];
18 void add(int u,int v){nxt[++tot]=head[u];head[u]=tot;to[tot]=v;}
19 int get(int x){return bing[x]==x?x:bing[x]=get(bing[x]);}
20 void buildkt(){
21     rep(i,1,n<<1)bing[i]=i;
22     sort(e+1,e+m+1,cmp);cnt=n;
23     rep(i,1,m){
24         int x=get(e[i].x),y=get(e[i].y),z=e[i].z;
25         if(x==y)continue;
26         w[++cnt]=z;add(cnt,x);add(cnt,y);
27         bing[x]=bing[y]=cnt;
28         if(cnt==(n<<1)-1)break;
29     }
30 }
31 int f[N][25],hs[N],id[N];
32 void dfs(int x,int fa){
33     f[x][0]=fa;Ls[x]=n+1;Rs[x]=0;
34     if(x<=n){h[++sum]=H[x];Ls[x]=Rs[x]=sum;return;}
35     rep1(i,x){
36         int p=to[i];dfs(p,x);
37         Ls[x]=min(Ls[x],Ls[p]);
38         Rs[x]=max(Rs[x],Rs[p]);
39     }
40 }
41 void init(){rep(j,1,17)rep(i,1,(n<<1)-1)f[i][j]=f[f[i][j-1]][j-1];}
42 int work(int start,int dis){rpd(i,17,0){int k=f[start][i];if(k==0||w[k]>dis)continue;start=k;}return start;}
43 struct Tree{int x,l,r;}t[N<<5];int ban[N];
44 void up(int k){t[k].x=t[t[k].l].x+t[t[k].r].x;}
45 void build(int &k,int l,int r){k=++rt;if(l==r)return;int mid=l+r>>1;build(t[k].l,l,mid);build(t[k].r,mid+1,r);}
46 void change(int k,int &k1,int l,int r,int p){
47     k1=++rt;t[k1]=t[k];if(l==r){t[k1].x+=1;return;}
48     int mid=l+r>>1;
49     if(mid>=p)change(t[k].l,t[k1].l,l,mid,p);
50     else change(t[k].r,t[k1].r,mid+1,r,p);
51     up(k1);
52 }
53 int find(int k,int k1,int l,int r,int p){
54     if(l==r)return hs[l];
55     int mid=l+r>>1,opt=t[t[k1].r].x-t[t[k].r].x;
56     if(opt>=p)return find(t[k].r,t[k1].r,mid+1,r,p);
57     return find(t[k].l,t[k1].l,l,mid,p-opt);
58 }
59 int main(){
60     n=read();m=read();Q=read();
61     rep(i,1,n)H[i]=read();
62     rep(i,1,m)e[i].x=read(),e[i].y=read(),e[i].z=read();
63     buildkt();dfs((n<<1)-1,0);init();
64     rep(i,1,n)hs[i]=h[i];sort(hs+1,hs+n+1);
65     rep(i,1,n)id[i]=lower_bound(hs+1,hs+n+1,h[i])-hs;
66     build(ban[0],1,n);
67     rep(i,1,n)change(ban[i-1],ban[i],1,n,id[i]);
68     //rep(i,1,n)cout<<i<<' '<<h[i]<<endl;
69     while(Q--){
70         int v=read(),x=read(),k=read(),root=work(v,x),L=Ls[root],R=Rs[root];
71         //cout<<L<<' '<<R<<endl;
72         if(k>R-L+1){puts("-1");continue;}
73         printf("%d\n",find(ban[L-1],ban[R],1,n,k));
74     }
75     //system("pause");
76     return 0;
77 }
View Code

转载于:https://www.cnblogs.com/maximumhanyu/p/11427597.html

在探索智慧旅游的新纪元中,一个集科技、创新与服务于一体的整体解决方案正悄然改变着我们的旅行方式。智慧旅游,作为智慧城市的重要分支,旨在通过新一代信息技术,如云计算、大数据、物联网等,为游客、旅游企业及政府部门提供无缝对接、高效互动的旅游体验与管理模式。这一方案不仅重新定义了旅游行业的服务标准,更开启了旅游业数字化转型的新篇章。 智慧旅游的核心在于“以人为本”,它不仅仅关注技术的革新,更注重游客体验的提升。从游前的行程规划、信息查询,到游中的智能导航、个性化导览,再到游后的心情分享、服务评价,智慧旅游通过构建“一云多屏”的服务平台,让游客在旅游的全过程中都能享受到便捷、个性化的服务。例如,游客可以通过手机APP轻松定制专属行程,利用智能语音导览深入了解景点背后的故事,甚至通过三维GIS地图实现虚拟漫游,提前感受目的地的魅力。这些创新服务不仅增强了游客的参与感和满意度,也让旅游变得更加智能化、趣味化。 此外,智慧旅游还为旅游企业和政府部门带来了前所未有的管理变革。通过大数据分析,旅游企业能够精准把握市场动态,实现旅游产品的精准营销和个性化推荐,从而提升市场竞争力。而政府部门则能利用智慧旅游平台实现对旅游资源的科学规划和精细管理,提高监管效率和质量。例如,通过实时监控和数据分析,政府可以迅速应对旅游高峰期的客流压力,有效预防景区超载,保障游客安全。同时,智慧旅游还促进了跨行业、跨部门的数据共享与协同合作,为旅游业的可持续发展奠定了坚实基础。总之,智慧旅游以其独特的魅力和无限潜力,正引领着旅游业迈向一个更加智慧、便捷、高效的新时代。
内容概要:本文详细介绍了大模型的发展现状与未来趋势,尤其聚焦于DeepSeek这一创新应用。文章首先回顾了人工智能的定义、分类及其发展历程,指出从摩尔定律到知识密度提升的转变,强调了大模型知识密度的重要性。随后,文章深入探讨了DeepSeek的发展路径及其核心价值,包括其推理模型、思维链技术的应用及局限性。此外,文章展示了DeepSeek在多个行业的应用场景,如智能客服、医疗、金融等,并分析了DeepSeek如何赋能个人发展,具体体现在公文写作、文档处理、知识搜索、论文写作等方面。最后,文章展望了大模型的发展趋势,如通用大模型与垂域大模型的协同发展,以及本地部署小模型成为主流应用渠道的趋势。 适合人群:对人工智能和大模型技术感兴趣的从业者、研究人员及希望利用DeepSeek提升工作效率的个人用户。 使用场景及目标:①了解大模型技术的最新进展和发展趋势;②掌握DeepSeek在不同领域的具体应用场景和操作方法;③学习如何通过DeepSeek提升个人在公文写作、文档处理、知识搜索、论文写作等方面的工作效率;④探索大模型在特定行业的应用潜力,如医疗、金融等领域。 其他说明:本文不仅提供了理论知识,还结合实际案例,详细介绍了DeepSeek在各个场景下的应用方式,帮助读者更好地理解和应用大模型技术。同时,文章也指出了当前大模型技术面临的挑战,如模型的局限性和数据安全问题,鼓励读者关注技术的持续改进和发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值