当前位置: 首页 > news >正文

牛客练习赛142 第四次忍界大战 并查集

原题再现

链接:D-第四次忍界大战_牛客练习赛142
来源:牛客网

一棵n个结点的树,每个结点都有一个权值w_{i}

称以 u 开始、以 v 结束的树上简单路径s是好路径,当且仅当

  • w_{u}=w_{v}​​;
  • 对∀i∈(1,∣s∣),均有 w_{s_{i}}>w_{u},其中∣s∣表示路径中的结点个数,∣s∣≥2。

求树上好路径数量。

题目解答

题目要求的是:起终点权相等其余点权均大于起终点权的简单路径个数。

先考虑最简单的情况,即∣s∣=2的情况。此时只需判断是否满足w_{u}=w_{v},如果满足路径个数+2,否则不变。这在输入边的信息时顺便处理即可。

其余情况,用到并查集和权值桶维护信息。

#include<bits/stdc++.h>
using namespace std;
long long ans;
vector<int> parent;
//查找根节点,带路径压缩
int find(int x) {if(x!=parent[x])parent[x]=find(parent[x]);return parent[x];
}
//合并两个集合
void merge(int x,int y) {int rootX=find(x);int rootY=find(y);if(rootX!=rootY)parent[rootY]=rootX;
}
signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n;cin>>n;vector<int>w(n);for(int& x:w)cin>>x;//点权map<int,vector<int>>pos;//权值桶for(int i=0;i<n;i++)pos[w[i]].push_back(i);//pos[w]是权值为w的点vector<vector<int>>adj(n);//树边for(int i=0;i<n-1;i++){int u,v;cin>>u>>v;u--,v--;adj[u].push_back(v);adj[v].push_back(u);ans+=(w[u]==w[v])*2;//|S|=2只需判断权值是否相等}//初始化并查集parent.resize(n);for(int i=0;i<n;i++)parent[i]=i;vector<int>cnt(n);vector<int>node;node.reserve(n);//从大到小遍历权值for(auto it=pos.rbegin();it!=pos.rend();it++){int val=it->first;const vector<int>&nodes=it->second;node.clear();fill(cnt.begin(),cnt.end(),0);// 处理每个节点的邻接节点for(int x:nodes){for(int y:adj[x]){if(w[y]<=val)continue;//如果邻接节点的权值小于等于当前节点,跳过int f=find(y);if(cnt[f]++==0)node.push_back(f);//如果是新加入的集合,记录下来}}// 统计集合内的路径数量for(int x:node){ans+=cnt[x]*(cnt[x]-1LL);cnt[x]=0;}// 合并集合for(int x:nodes){for(int y:adj[x]){if(w[y]>=val)merge(x,y);}}}cout<<ans;return 0;
}

参考:牛客练习赛 142 题解_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网

http://www.dtcms.com/a/307997.html

相关文章:

  • 永磁同步电机无速度算法--直流误差抑制自适应二阶反推观测器
  • Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)
  • 【React】diff 算法
  • Elasticsearch 索引及节点级别增删改查技术
  • 基于单片机胎压检测/锅炉蒸汽压力/气压检测系统
  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • 分布式ID方案(标记)
  • TDengine oss数据的导出和导入
  • 大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
  • 学习Redis源码路径
  • 开发避坑短篇(12):达梦数据库TIMESTAMP字段日期区间查询实现方案
  • 打破数据质量瓶颈:用n8n实现30秒专业数据质量报告自动化
  • 【数据结构初阶】--二叉树选择题专辑
  • 《Spring Boot应用工程化提升:多模块、脚手架与DevTools》
  • leetcode 2683. 相邻值的按位异或 中等
  • Python实现调整矩阵维度: view
  • 今日矩阵系列
  • mac环境配置rust
  • 机器人系统对接线索平台好处
  • 前端工程化包管理器:从npm基础到nvm多版本管理实战
  • HCIP面试第一章内容总结
  • 老旧远程控制管理模块(物联网设备)渗透实战:SNMP泄露+内核提权攻击链深度解析
  • java web 通过 servlet 给前端设置编码格式
  • 2025年物联网新趋势:格行随身WiFi的模块化架构与低延迟优化
  • AI Agent 的 10 种应用场景:物联网、RAG 与灾难响应
  • 【前端知识】JS单线程模型深入解析
  • 第 10 章 文件和异常
  • 机器人学和自动化领域中的路径规划方法
  • 在幸狐RV1106板子上用gcc14.2本地编译安装samba-4.22.3服务器,并且支持XP系统访问共享文件夹
  • 单调栈:739. 每日温度,496. 下一个更大的元素