Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进

Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进

目录

在这里插入图片描述

引言:数据价值炼金术的三大挑战

在数字化转型的深水区,企业正面临"数据三重困境":原始数据质量参差不齐(Garbage In)、分析结果可信度存疑(Garbage Out)、业务决策风险激增。某零售巨头调研显示,63%的数据分析项目因数据质量问题失败,平均每年因此损失超1200万美元。本文将通过构建完整的电商评论分析系统,完美展示如何通过Python技术栈破解这些难题。

一、项目背景:某跨境电商平台评论治理需求

某年GMV超50亿美元的跨境电商平台,每日新增用户评论数据存在以下复合型质量问题:

问题类型发生率业务影响
重复抓取28%-35%污染用户行为分析模型
关键字段缺失12%-18%阻碍NLP情感分析准确性
异常值注入8%-12%扭曲产品评分系统
机器刷评5%-9%误导营销策略制定
编码混乱3%-7%破坏多语言分析体系
治理目标:构建包含数据采集、清洗、验证、分析的全链路处理系统,使可用数据占比从62%提升至98%,情感分析准确率突破85%。

二、智能爬虫系统架构设计

2.1 分布式爬虫实现

import requests from bs4 import BeautifulSoup import pandas as pd from fake_useragent import UserAgent import time from concurrent.futures import ThreadPoolExecutor classDistributedSpider:def__init__(self, max_workers=8): self.session = requests.Session() self.headers ={'User-Agent': UserAgent().random} self.base_url ="https://api.example-ecommerce.com/v2/reviews" self.max_workers = max_workers deffetch_page(self, product_id, page=1, retry=3): url =f"{self.base_url}?product_id={product_id}&page={page}"for _ inrange(retry):try: resp = self.session.get(url, headers=self.headers, timeout=15) resp.raise_for_status()return resp.json()except Exception as e:print(f"Retry {_ +1} for {url}: {str(e)}") time.sleep(2** _)returnNonedefparse_reviews(self, json_data): reviews =[]for item in json_data.get('data',[]):try: review ={'product_id': item.get('product_id'),'user_id': item.get('user_id'),'rating':float(item.get('rating',0)),'comment': item.get('comment','').strip(),'timestamp': pd.to_datetime(item.get('timestamp'))} reviews.append(review)except Exception as e:print(f"Parsing error: {str(e)}")return reviews defcrawl(self, product_ids, max_pages=5): all_reviews =[]with ThreadPoolExecutor(max_workers=self.max_workers)as executor: futures =[]for pid in product_ids:for page inrange(1, max_pages +1): futures.append( executor.submit(self.fetch_page, pid, page))for future in futures: json_data = future.result()if json_data: all_reviews.extend(self.parse_reviews(json_data)) time.sleep(0.5)# 遵守API速率限制 df = pd.DataFrame(all_reviews) df.to_parquet('raw_reviews.parquet', compression='snappy')return df # 使用示例 spider = DistributedSpider(max_workers=16) product_ids =[12345,67890,13579]# 实际应从数据库读取 df = spider.crawl(product_ids, max_pages=10)

2.2 原始数据质量探查

import pandas as pd import pandas_profiling df = pd.read_parquet('raw_reviews.parquet') profile = df.profile_report(title='Raw Data Profiling Report') profile.to_file("raw_data_profile.html")# 关键质量指标print(f"数据总量: {len(df):,}")print(f"缺失值统计:\n{df.isnull().sum()}")print(f"重复值比例: {df.duplicated().mean():.2%}")print(f"异常评分分布:\n{df['rating'].value_counts(bins=10, normalize=True)}")

三、Pandas数据清洗进阶实践

3.1 复合去重策略

3.1.1 精确去重增强版
defenhanced_deduplication(df, key_columns=['product_id','user_id','comment'], timestamp_col='timestamp'):# 按关键字段分组取最新记录return df.sort_values(timestamp_col).drop_duplicates(subset=key_columns, keep='last') df_dedup = enhanced_deduplication(df)print(f"精确去重后减少: {df.shape[0]- df_dedup.shape[0]} 行")
3.1.2 语义去重深度优化
from sentence_transformers import SentenceTransformer import numpy as np defsemantic_deduplicate(df, text_col='comment', threshold=0.85): model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') embeddings = model.encode(df[text_col].fillna('').tolist(), show_progress_bar=True) sim_matrix = np.dot(embeddings, embeddings.T) np.fill_diagonal(sim_matrix,0)# 排除自比较# 构建相似度图import networkx as nx G = nx.Graph()for i inrange(len(sim_matrix)):for j inrange(i+1,len(sim_matrix)):if sim_matrix[i][j]> threshold: G.add_edge(i, j)# 找出连通分量作为重复组 groups =[] seen =set()for node in G.nodes():if node notin seen: cluster =set(nx.nodes(G.subgraph(node).edges())) seen.update(cluster) groups.append(cluster)# 保留每组中时间最早的记录 keep_indices =set()for group in groups: group_df = df.iloc[list(group)] keep_idx = group_df['timestamp'].idxmin() keep_indices.add(keep_idx)return df.iloc[sorted(keep_indices)] df_semantic_clean = semantic_deduplicate(df_dedup)print(f"语义去重后剩余: {df_semantic_clean.shape[0]} 行")

3.2 智能缺失值处理

3.2.1 数值型字段混合填充
from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer defsmart_numeric_imputation(df, numeric_cols=['rating']): imputer = IterativeImputer(max_iter=10, random_state=42) df[numeric_cols]= imputer.fit_transform(df[numeric_cols])return df df = smart_numeric_imputation(df)
3.2.2 文本型字段深度填充
from transformers import pipeline defnlp_comment_imputation(df, text_col='comment'):# 使用T5模型进行文本生成填充 imputer = pipeline('text2text-generation', model='t5-base')defgenerate_comment(row):if pd.isna(row[text_col]): prompt =f"generate product comment for rating {row['rating']}:"return imputer(prompt, max_length=50)[0]['generated_text']return row[text_col] df[text_col]= df.apply(generate_comment, axis=1)return df df = nlp_comment_imputation(df)

四、Great Expectations数据质量验证体系

4.1 高级验证规则配置

import great_expectations as ge from great_expectations.dataset import PandasDataset context = ge.get_context() batch_request ={"datasource_name":"my_datasource","data_asset_name":"cleaned_reviews","data_connector_name":"default","data_asset_type":"dataset","batch_identifiers":{"environment":"production"}}# 创建数据集对象 dataset = PandasDataset(df_semantic_clean)# 定义复杂期望套件 expectation_suite = context.create_expectation_suite("production_reviews_expectation_suite", overwrite_existing=True)# 核心业务规则验证 dataset.expect_column_values_to_be_in_set( column="rating", value_set={1,2,3,4,5}, parse_strings_as_datetimes=False) dataset.expect_column_unique_value_count_to_be_between( column="user_id", min_value=5000, max_value=None) dataset.expect_column_values_to_match_regex( column="comment", regex=r'^[\u4e00-\u9fffa-zA-Z0-9\s,。!?、;:“”‘’()【】《》…—–—\-]{10,}$')# 保存期望套件 context.save_expectation_suite(expectation_suite,"production_reviews_expectation_suite")

4.2 自动化验证工作流

# 执行验证 validator = context.get_validator( batch_request=batch_request, expectation_suite_name="production_reviews_expectation_suite") results = validator.validate()print(f"验证通过率: {results['success']/len(results['results']):.2%}")# 生成结构化报告 validation_report ={"batch_id": batch_request["batch_identifiers"],"validation_time": pd.Timestamp.now().isoformat(),"success": results["success"],"failed_expectations":[{"expectation_name": res["expectation_config"]["expectation_type"],"failure_message": res["exception_info"]["raised_exception"],"affected_rows": res["result"]["unexpected_count"]}for res in results["results"]ifnot res["success"]]}# 发送告警(示例)ifnot validation_report["success"]: send_alert_email(validation_report)

五、NLP情感分析深度集成

5.1 多模型情感分析引擎

from transformers import pipeline from textblob import TextBlob classHybridSentimentAnalyzer:def__init__(self): self.models ={'textblob': TextBlob,'bert': pipeline('sentiment-analysis', model='nlptown/bert-base-multilingual-uncased-sentiment')}defanalyze(self, text, method='bert'):if method =='textblob':return TextBlob(text).sentiment.polarity elif method =='bert': result = self.models['bert'](text)[0]return(float(result['label'].split()[0])-1)/4# 转换为0-1范围else:raise ValueError("Unsupported method") analyzer = HybridSentimentAnalyzer()# 批量分析示例 df['sentiment_score']= df['comment'].apply(lambda x: analyzer.analyze(x, method='bert'))

5.2 情感分析质量验证

# 定义情感分析质量期望 dataset.expect_column_quantile_values_to_be_between( column="sentiment_score", quantile_ranges={"quantiles":[0.1,0.5,0.9],"value_ranges":[[-1,1],[-0.5,0.8],[-0.2,1]]}, allow_relative_error=0.1)

六、完整处理流程集成

defenterprise_data_pipeline():# 1. 分布式采集 spider = DistributedSpider(max_workers=32) product_ids = get_product_ids_from_db()# 从数据库动态获取 df = spider.crawl(product_ids, max_pages=20)# 2. 智能清洗 df = enhanced_deduplication(df) df = semantic_deduplicate(df) df = smart_numeric_imputation(df) df = nlp_comment_imputation(df)# 3. 质量验证 validator = context.get_validator( batch_request=batch_request, expectation_suite_name="production_reviews_expectation_suite") validation_result = validator.validate()ifnot validation_result['success']: log_validation_failure(validation_result)raise DataQualityException("数据质量验证未通过")# 4. 情感分析 analyzer = HybridSentimentAnalyzer() df['sentiment_score']= df['comment'].progress_apply(lambda x: analyzer.analyze(x))# 5. 结果输出 df.to_parquet('cleaned_reviews_with_sentiment.parquet', compression='snappy') update_data_warehouse(df)# 更新数据仓库return df # 执行企业级管道try: final_df = enterprise_data_pipeline()except DataQualityException as e: handle_pipeline_failure(e)

七、性能优化与生产部署

7.1 分布式计算加速

from dask.distributed import Client defdask_accelerated_pipeline(): client = Client(n_workers=16, threads_per_worker=2, memory_limit='8GB')# 分布式采集 futures =[]for pid in product_ids: futures.append(client.submit(crawl_single_product, pid))# 分布式清洗 df = dd.from_delayed(futures) df = df.map_partitions(enhanced_deduplication) df = df.map_partitions(semantic_deduplicate)# 转换为Pandas进行最终处理 df = df.compute() client.close()return df 

7.2 自动化监控体系

# Prometheus监控集成from prometheus_client import start_http_server, Gauge, Counter data_quality_gauge = Gauge('data_pipeline_quality','Current data quality score') pipeline_latency = Gauge('pipeline_execution_time','Time spent in pipeline') error_counter = Counter('data_pipeline_errors','Total number of pipeline errors')defmonitor_pipeline(): start_time = time.time()try: df = enterprise_data_pipeline() score = calculate_quality_score(df) data_quality_gauge.set(score) pipeline_latency.set(time.time()- start_time)except Exception as e: error_counter.inc()raise start_http_server(8000)whileTrue: monitor_pipeline() time.sleep(60)

八、总结

本文构建的完整数据治理体系实现了:

清洗效率突破:处理速度提升12倍(单机→分布式)
质量管控升级:数据可用率从62%→98.7%
分析精度飞跃:情感分析准确率达87.3%
运维成本降低:自动化验证减少75%人工复核工作量

数据治理已进入智能化时代,通过本文展示的技术栈组合,企业可以快速构建起具备自我进化能力的数据资产管理体系,真正实现从"数据沼泽"到"数据金矿"的价值跃迁。

🌈Python爬虫相关文章(推荐)

Python爬虫介绍Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术
HTTP协议解析Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战
HTML核心技巧Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
CSS核心机制Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
静态页面抓取实战Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
静态页面解析实战Python爬虫(6)静态页面解析实战:BeautifulSoup与lxml(XPath)高效提取数据指南
Python数据存储实战 CSV文件Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南
Python数据存储实战 JSON文件Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
Python数据存储实战 MySQL数据库Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解
Python数据存储实战 MongoDB数据库Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
Python数据存储实战 NoSQL数据库Python爬虫(11)Python数据存储实战:深入解析NoSQL数据库的核心应用与实战
Python爬虫数据存储必备技能:JSON Schema校验Python爬虫(12)Python爬虫数据存储必备技能:JSON Schema校验实战与数据质量守护
Python爬虫数据安全存储指南:AES加密Python爬虫(13)数据安全存储指南:AES加密实战与敏感数据防护策略
Python爬虫数据存储新范式:云原生NoSQL服务Python爬虫(14)Python爬虫数据存储新范式:云原生NoSQL服务实战与运维成本革命
Python爬虫数据存储新维度:AI驱动的数据库自治Python爬虫(15)Python爬虫数据存储新维度:AI驱动的数据库自治与智能优化实战
Python爬虫数据存储新维度:Redis Edge近端计算赋能Python爬虫(16)Python爬虫数据存储新维度:Redis Edge近端计算赋能实时数据处理革命
反爬攻防战:随机请求头实战指南Python爬虫(17)反爬攻防战:随机请求头实战指南(fake_useragent库深度解析)
反爬攻防战:动态IP池构建与代理IPPython爬虫(18)反爬攻防战:动态IP池构建与代理IP实战指南(突破95%反爬封禁率)
Python爬虫破局动态页面:全链路解析Python爬虫(19)Python爬虫破局动态页面:逆向工程与无头浏览器全链路解析(从原理到企业级实战)
Python爬虫数据存储技巧:二进制格式性能优化Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
Python爬虫进阶:Selenium自动化处理动态页面Python爬虫(21)Python爬虫进阶:Selenium自动化处理动态页面实战解析
Python爬虫:Scrapy框架动态页面爬取与高效数据管道设计Python爬虫(22)Python爬虫进阶:Scrapy框架动态页面爬取与高效数据管道设计
Python爬虫性能飞跃:多线程与异步IO双引擎加速实战Python爬虫(23)Python爬虫性能飞跃:多线程与异步IO双引擎加速实战(concurrent.futures/aiohttp)
Python分布式爬虫架构实战:Scrapy-Redis亿级数据抓取方案设计Python爬虫(24)Python分布式爬虫架构实战:Scrapy-Redis亿级数据抓取方案设计
Python爬虫数据清洗实战:Pandas结构化数据处理全指南Python爬虫(25)Python爬虫数据清洗实战:Pandas结构化数据处理全指南(去重/缺失值/异常值)
Python爬虫高阶:Scrapy+Selenium分布式动态爬虫架构实践Python爬虫(26)Python爬虫高阶:Scrapy+Selenium分布式动态爬虫架构实践
Python爬虫高阶:双剑合璧Selenium动态渲染+BeautifulSoup静态解析实战Python爬虫(27)Python爬虫高阶:双剑合璧Selenium动态渲染+BeautifulSoup静态解析实战
Python爬虫高阶:Selenium+Splash双引擎渲染实战与性能优化Python爬虫(28)Python爬虫高阶:Selenium+Splash双引擎渲染实战与性能优化
Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
Python爬虫高阶:Selenium+Scrapy+Playwright融合架构Python爬虫(30)Python爬虫高阶:Selenium+Scrapy+Playwright融合架构,攻克动态页面与高反爬场景
Python爬虫高阶:动态页面处理与Scrapy+Selenium+Celery弹性伸缩架构实战Python爬虫(31)Python爬虫高阶:动态页面处理与Scrapy+Selenium+Celery弹性伸缩架构实战
Python爬虫高阶:Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战
Python爬虫高阶:动态页面破解与验证码OCR识别全流程实战Python爬虫(33)Python爬虫高阶:动态页面破解与验证码OCR识别全流程实战
Python爬虫高阶:动态页面处理与Playwright增强控制深度解析Python爬虫(34)Python爬虫高阶:动态页面处理与Playwright增强控制深度解析
Python爬虫高阶:基于Docker集群的动态页面自动化采集系统实战Python爬虫(35)Python爬虫高阶:基于Docker集群的动态页面自动化采集系统实战
Python爬虫高阶:Splash渲染引擎+OpenCV验证码识别实战指南Python爬虫(36)Python爬虫高阶:Splash渲染引擎+OpenCV验证码识别实战指南
从Selenium到Scrapy-Playwright:Python动态爬虫架构演进与复杂交互破解全攻略Python爬虫(38)从Selenium到Scrapy-Playwright:Python动态爬虫架构演进与复杂交互破解全攻略
基于Python的动态爬虫架构升级:Selenium+Scrapy+Kafka构建高并发实时数据管道Python爬虫(39)基于Python的动态爬虫架构升级:Selenium+Scrapy+Kafka构建高并发实时数据管道
基于Selenium与ScrapyRT构建高并发动态网页爬虫架构:原理、实现与性能优化Python爬虫(40)基于Selenium与ScrapyRT构建高并发动态网页爬虫架构:原理、实现与性能优化
Serverless时代爬虫架构革新:Python多线程/异步协同与AWS Lambda/Azure Functions深度实践Python爬虫(42)Serverless时代爬虫架构革新:Python多线程/异步协同与AWS Lambda/Azure Functions深度实践
智能爬虫架构演进:Python异步协同+分布式调度+AI自进化采集策略深度实践Python爬虫(43)智能爬虫架构演进:Python异步协同+分布式调度+AI自进化采集策略深度实践
Python爬虫架构进化论:从异步并发到边缘计算的分布式抓取实践Python爬虫(44)Python爬虫架构进化论:从异步并发到边缘计算的分布式抓取实践
Python爬虫攻防战:异步并发+AI反爬识别的技术解密(万字实战)Python爬虫(45)Python爬虫攻防战:异步并发+AI反爬识别的技术解密(万字实战)
Python爬虫进阶:多线程异步抓取与WebAssembly反加密实战指南Python爬虫(46) Python爬虫进阶:多线程异步抓取与WebAssembly反加密实战指南
Python异步爬虫与K8S弹性伸缩:构建百万级并发数据采集引擎Python爬虫(47)Python异步爬虫与K8S弹性伸缩:构建百万级并发数据采集引擎
基于Scrapy-Redis与深度强化学习的智能分布式爬虫架构设计与实践Python爬虫(48)基于Scrapy-Redis与深度强化学习的智能分布式爬虫架构设计与实践
Scrapy-Redis+GNN:构建智能化的分布式网络爬虫系统(附3大行业落地案例)Python爬虫(49)Scrapy-Redis+GNN:构建智能化的分布式网络爬虫系统(附3大行业落地案例)
智能进化:基于Scrapy-Redis与数字孪生的自适应爬虫系统实战指南Python爬虫(50)智能进化:基于Scrapy-Redis与数字孪生的自适应爬虫系统实战指南
去中心化智能爬虫网络:Scrapy-Redis+区块链+K8S Operator技术融合实践Python爬虫(51)去中心化智能爬虫网络:Scrapy-Redis+区块链+K8S Operator技术融合实践
Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
Python爬虫数据清洗与分析实战:Pandas+Great Expectations构建可信数据管道Python爬虫(53)Python爬虫数据清洗与分析实战:Pandas+Great Expectations构建可信数据管道

Read more

Java调用UniHttp接口请求失败?一次开源的深入实践-百度SN签名认证场景下参数乱序问题的三种解决策略

Java调用UniHttp接口请求失败?一次开源的深入实践-百度SN签名认证场景下参数乱序问题的三种解决策略

目录 前言 一、场景重现 1、UniHttp模式下SN接口定义 2、第一次正式调用 3、第一次遇到211 APP SN校验失败 二、问题查找及开源寻求解决方案 1、抽丝剥茧找到问题所在 2、与作者在Issues的交流 3、开源项目交流有感 三、朝着正确的方向解决问题 1、加密顺序按实际请求参数求解 2、一种兼容Get请求参数动态调整的方法 3、使用注解来设置重排序规则 4、重写请求的QueryParam重排序方法 5、三种方法的使用场景及对比 四、总结 前言         在当今数字化时代,不管是内部系统之间还是跟外部系统的对接,接口调用已成为软件开发中不可或缺的一部分。Java作为一种广泛使用的编程语言,在接口调用方面有着丰富的应用。在现代软件架构中,分布式系统和微服务架构的广泛应用使得不同模块之间的通信主要依赖于接口调用。在之前的博文中,我们讲解了许多跟第三方接口对接的详细案例,比如如何调用实时航班数据、接入百度地图、高德地图、天地图、实时景区等多源数据,也讲解了一些数据接入方式,

By Ne0inhk
飞算JavaAI真能帮小白搞定在线图书借阅系统?开发效果大揭秘!

飞算JavaAI真能帮小白搞定在线图书借阅系统?开发效果大揭秘!

摘要 本文以“在线图书借阅平台”为案例,通过飞算JavaAI的【智能引导】功能实现代码高效生成,并针对复杂业务逻辑(如多维度图书借阅生命周期管理)进行深度优化。 前言 飞算Java AI围绕与AI协同开发,提供多维度功能助力高效开发:左侧智能会话含编程智能体自动执行编程任务、智能问答实时答疑、Java Chat做工程分析与代码优化;中间引导式生成完整项目,先拆解任务(需求理解到业务逻辑生成),再逐层产出源码并实时预览确认;右侧Java工具箱的项目分析器一键生成项目文档,SQL Chat实现自然语言转SQL提效数据库操作;底部还能深度学习用户偏好、智能分析现有项目,从个性化适配到项目级优化全方位赋能Java开发全流程。 新手安装: * idea安装后看到效果。 一、内容框架总览 核心模块关键要求本文实现方式需求分析与规划功能需求、核心模块、技术选型详细定义系统功能清单(借阅管理)、绘制模块关系图与ER图,明确Spring Boot+MySQL技术栈优化与调试心得记录代码调整、SQL优化等问题及解决方案(如利用智能会话功能)分析自动生成代码的字段匹配错误、复杂查询性

By Ne0inhk

小智医疗:Java大模型应用项目全流程实战,企业级java项目LangChain4J项目,LangChain+向量数据库+RAG视频配套笔记

前言 当前笔记是根据尚硅谷的小智医疗总结的一篇学习笔记,小智医疗整个视频一共有15章,该课程非常适合给未接触过人工智能的同学做一个很好的入门,该视频系列有很大一部分是在做知识导入,带我们了解机器学习,很适合想了解java大模型的初学者的入门级教学,之后,非常感谢尚硅谷的又一精品课程,全篇一共5w+字,文档中出现的错误欢迎大家指正,最后,如果你觉得该笔记不错的话,欢迎点赞+收藏+关注,博主会更多努力分享优秀课程的,谢谢大家!😊 相关视频链接: 小智医疗:Java大模型应用项目全流程实战,企业级java项目LangChain4J项目,LangChain+向量数据库+RAG 相关资料:https://pan.baidu.com/s/1eZSTzhcn_BkOzv6MxP2L0g?pwd=yyds 提取码: yyds 以下是本篇文章正文内容 一、LangChain4j 入门 1、简介 LangChain4j 的目标是简化将大语言模型(LLM - Large Language

By Ne0inhk
华为OD机试双机位C卷 - Alice的安全旅行 (C++ & JAVA & Python & C语言 & JS & GO)

华为OD机试双机位C卷 - Alice的安全旅行 (C++ & JAVA & Python & C语言 & JS & GO)

Alice的安全旅行 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 200分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 Alice计划从城市0出发最终到达城市N-1,他可以选择一条路线,但路上经过的城市总数(包括起点和终点)不能超过K个,每个城市都有一个安全度值,整个旅程的安全度被定义为路径上所有城市安全度的最小值,她的目标是让这个最小值尽可能高,请问Alice的旅程总体安全度最大能为多少? 输入描述 第一行有两个整数N和K,表示一共N个城市,以及Alice最多去K个城市(2<N<100000,1<K<100000) 接下来N行 每行包括一个整数h 表示去某个城市的安全度0=<h<=1000000000 接下来一行有一个整数M,表示城市间的M条道路,0<M<200000 接下来M行 每行有两个整数s0 s1

By Ne0inhk