首页 > 编程语言 >P1955 程序自动分析 题解

P1955 程序自动分析 题解

时间:2024-10-18 17:20:48浏览次数:1  
标签:P1955 cmp1 题解 查集 离线 cin num 自动 mp

P1955 程序自动分析

一道并查集的裸题,并查集存储传递性,后判断。主题思路十分简单,重点在于离散化与离线的处理。

离散化,为什么会想到离散化呢,观察数据范围 \(1<i,j<{10}^9\) ,数据范围过大,导致数组不可能开到 \(1e9\) 但是 \(1<n<1e5\) 考虑到每次输入只有两个数,若每个数都两两不同,则极限大小为 \(2e5\) 在可接受范围之内,用 \(map\) 来初始化,由于关心的是其两个数之间的逻辑关系,与其大小并无关系,所以省去按大小排序这一步。

离线处理,并查集维护相等关系,由于相等具有传递性 \(a_i=a_j,a_j=a_k则有a_i=a_k\) ,但是不等不具有传递性 \(a_i \ne a_j,a_j \ne a_k那么a_i不一定不等于a_k\) 但由于其要构成矛盾,则先判断相等与先判断不等无区别,所以离线操作,先维护相等并查集,再对于不等关系判断是否矛盾,输出即可。

#include <bits/stdc++.h>
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 1e5+10,mod=1e9+7;
struct node{
    int x,y;
    int e;
}a[maxn<<1];
int fa[maxn<<1];
void in_it(int n){
    seq(i,1,2*n){
        fa[i]=i;
        a[i]={0,0,0};
    }
}
int find(int x){
    if(fa[x]==x){
        return x;
    }
    return fa[x]=find(fa[x]);
}
void merge(int x,int y){
    int f1=find(x),f2=find(y);
    if(f1==f2) return;
    fa[f2]=f1;
}
int t,tot,n;
ll x,y;
map<ll,int>mp;
bool cmp(node x,node y){
    return x.e>y.e;
}
bool cmp1=0;
signed main()
{
    // freopen(".in","r",stdin);
    // freopen(".out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>t;
    while(t--){
        mp.clear();
        cmp1=0;
        tot=0;
        cin>>n;
        in_it(n);
        seq(i,1,n){
            cin>>x>>y>>a[i].e;
            if(!mp[x]) mp[x]=++tot;
            if(!mp[y]) mp[y]=++tot;
            a[i].x=mp[x];
            a[i].y=mp[y];
        }
        sort(a+1,a+1+n,cmp);
        int num=1;
        while(a[num].e){
            merge(a[num].x,a[num].y);
            num++;
        }
        seq(i,num,n){
            if(find(a[i].x)==find(a[i].y)){
                cmp1=1;
                break;
            }
        }
        if(cmp1){
            cout<<"NO"<<"\n";
        }
        else{
            cout<<"YES"<<"\n";
        }
    }
    return 0;
}

标签:P1955,cmp1,题解,查集,离线,cin,num,自动,mp
From: https://www.cnblogs.com/adsd45666/p/18474713

相关文章

  • 【题解】[Codechef] Beautiful Permutation
    传送门以此纪念我场切的dp。这种计数的类型一看就很dp的样子。考场上一开始设的dp状态是\(dp_{i,j,k_1,k_2,0/1}\)表示将前\(i\)个数分为\(j\)段,放了\(k_1\)个偶数,\(k_2\)个奇数,当前段为偶数段或奇数段的方案数。考虑如何转移,记\(cnt_0\)表示序列中可填入的偶数......
  • Codeforces Round 892 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1859A.UnitedWeStand选最大的数即可注意题目输出格式 #include<iostream> #include<string.h> #include<map> #include<vector> #include<set> #include<unordered_set> #include<stack> #incl......
  • Windows环境PgSql自动备份脚本
    PgSql脚本如下保存到指定路径并添打成压缩包@echooffsetlocalenabledelayedexpansionsetpg_path=D:\PgSql\bin REM数据库Bin路径setbase_backup_path=D:\backup_pgsql REM备份路径setdb_name=pgsql REM数据库名称setuser=postgres REM数据库账户名setPGPAS......
  • Magic: 人工智能驱动的低代码/无代码软件开发自动化框架
    Magic:人工智能驱动的低代码/无代码软件开发自动化框架在当今快速发展的技术世界中,软件开发的效率和速度变得越来越重要。为了应对这一挑战,Magic应运而生-这是一个革命性的人工智能驱动的低代码和无代码软件开发自动化框架,旨在彻底改变软件开发的方式。Magic的核心理念Ma......
  • Java项目集成xxl-job(自动任务)
    官网|代码官网网址:https://www.xuxueli.com/xxl-job/首先:文档很详细,非常清晰,集成到项目中也非常简单进入官网后下拉就是文档按文档一步步一般没有问题,主要说下可能会疑惑的点直接点击1.5在gitee下载代码:http://gitee.com/xuxueli0323/xxl-job代码结构如下:以......
  • Python爬虫:自动化获取商品评论数据
    为什么选择Python爬虫API高效的数据处理:Python的数据处理能力,结合Pandas等库,可以轻松处理和分析大量的评论数据。丰富的库支持:Python拥有丰富的库,如requests用于发送HTTP请求,BeautifulSoup用于解析HTML,json用于处理JSON数据,这些库大大简化了爬虫的开发过程。灵活性:Python爬虫......
  • PHP爬虫:自动化获取商品评论数据
    在电子商务的蓬勃发展中,商品评论已成为消费者决策过程中不可或缺的一部分。它们不仅为潜在买家提供了宝贵的购买参考,也为卖家提供了改进产品和服务的直接反馈。然而,手动收集和分析这些评论数据是一项耗时且复杂的任务。PHP爬虫技术的出现,使得自动化获取商品评论数据成为可能,从......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)
    1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动两大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。但是微软已经在Win10中不维护IE浏览器了,用Edge浏览器代替或者兼容IE模式的浏览器,因此宏哥这......
  • 自动签名失败原因找到
    作者:狼哥团队:坚果派团队介绍:坚果派由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉。团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,目前已开发鸿蒙原......
  • P4343 [SHOI2015] 自动刷题机(最详细版本 通俗易懂)
    题目背景曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机——一种可以自动AC题目的神秘装置。题目描述自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序。每秒,自动刷题机的代码生成模块会有两种可能的结果:1.写了 x 行代码2......