图论/数据结构-并查集-psort

psort

题解

题意

​ a数组中第i位只能与a数组中第|i-d[i]|位交换,问a数组最后能否变成b数组

思路

​ 如果把所有能够交换的数放在一个集合中,用并查集维护,那么只需比较ab数组中每一位数的父节点是否一致就可以判断这两数能不能完成交换,即可以判断能否在这个位置完成a->b的变化

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 110;

int n;
int p[N],b[N],d[N];

int find(int x)  // 并查集
{
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}

int main()
{
    cin>>n;
    
    for (int i = 1; i <= n; i ++ ){
        cin>>b[i];
        p[i]=i;//初始化
    }
    
    for (int i = 1; i <= n; i ++ ){
        cin>>d[i];
        
        int x=i+d[i],y=i-d[i];//把能到的两个位置标出
        if(x<=n)p[find(x)]=find(i);//如果不越界那么就合并
        if(y>=1)p[find(y)]=find(i);
    }
    
    for (int i = 1; i <= n; i ++ )//核验每个位置是否能完成交换
        if(find(b[i])!=find(i)){//注意a数组其实就是a[i]=i,所以简化了
            cout<<"NO"<<'\n';
            return 0;
        }
    cout << "YES" <<'\n';
    
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import time import openpyxl from selenium import webdriver from bs4 import BeautifulSoup # 设置请求头,模拟真实浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36', } # 使用Selenium启动浏览器 driver = webdriver.Chrome() data = [] counter = 1 # 序列号计数器 # 打开网页 for i in range(1,6): url = 'https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&psort=3&wq=%E6%89%8B%E6%9C%BA&psort=3&pvid=0faa3ec65d444d68a66161cdf464d451&psort=3&page={}&s=61&click=0'.format( (i * 2) - 1) driver.get(url) # 模拟滚动页面,以触发异步请求加载更多商品信息 driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') time.sleep(2) # 获取完整页面内容 html = driver.page_source # 解析网页内容,提取商品名称和价格信息 soup = BeautifulSoup(html, 'html.parser') products = soup.select('.gl-item') for product in products: product_id = product['data-sku'] # 提取产品ID name = product.select('.p-name em')[0].text.strip() product_url = 'https:' + product.select('.p-name a')[0]['href'] # 修改产品URL price = product.select('.p-price strong i')[0].text.strip() data.append([counter, product_id, name, product_url, price]) # 将产品数据添加到列表中 counter += 1 # 每个产品的增量计数器 # 关闭浏览器 driver.quit() # 创建Excel文件并保存数据 wb = openpyxl.Workbook() ws = wb.active ws.append(['top', '商品ID', '商品名称', '商品链接', '价格']) # 添加已修改列顺序的标题行 for item in data: ws.append(item) wb.save('jd_top300.xlsx') print("数据已保存到jd_top300.xlsx文件。")
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值