洛谷 P1955 [NOI2015] 程序自動分析

【題目鏈接】

洛谷 P1955 [NOI2015] 程序自動分析

【題目考點】

1. 并查集
2. 離散化

【解題思路】

多組數據問題,對于每組數據,有多個 x i = x j x_i=x_j xi?=xj? x i ≠ x j x_i \neq x_j xi?=xj?的約束條件。

所有相等的變量構成一個集合,不相等的變量在不同的集合。可以使用并查集表示集合。
該題的變量編號 i i i j j j最大可達到 1 0 9 10^9 109,無法直接作為并查集fa數組的下標,所以需要先對所有輸入的 i i i j j j進行離散化。由于每組數據輸入的約束條件的數量 n ≤ 1 0 5 n\le 10^5 n105,每一個約束條件最多新增兩個變量編號。因此在對變量編號進行離散化后,最多存在 2 ? 1 0 5 2*10^5 2?105個元素,離散化后的數值的范圍為 1 ~ 2 ? 1 0 5 1\sim 2*10^5 12?105,可以作為fa數組的下標。

  • 先遍歷所有約束。對于 x i = x j x_i = x_j xi?=xj?,那么可以認為 x i x_i xi? x j x_j xj?同屬于一個集合,將 x i x_i xi? x j x_j xj?所在的集合合并。
  • 再次遍歷所有約束,對于 x i ≠ x j x_i \neq x_j xi?=xj?,而且 x i x_i xi? x j x_j xj?已屬于同一集合,那么該問題中的約束條件無法都被滿足,輸出NO。

當看完所有約束后,如果沒有輸出NO,則以上約束條件可以同時滿足,輸出YES。

【題解代碼】

#include<bits/stdc++.h>
using namespace std;
#define N 100005
struct Node
{int i, j, e;
};
vector<Node> op;
vector<int> t;
int fa[2*N];//不同的變量編號最多有2N個,因此并查集fa數組長度設為2N 
void init()
{for(int i = 1; i < 2*N; ++i)fa[i] = i;
}
int find(int x)
{return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y)
{fa[find(x)] = find(y);
}
void discretization()
{sort(t.begin(), t.end());t.erase(unique(t.begin(), t.end()), t.end());for(Node &p : op){p.i = upper_bound(t.begin(), t.end(), p.i)-t.begin();//離散化后,變量編號范圍為1~2*10^5 p.j = upper_bound(t.begin(), t.end(), p.j)-t.begin();}
}
bool isMatch()//是否可以滿足給定的所有約束 
{for(Node p : op) if(p.e == 0 && find(p.i) == find(p.j))return false;return true;
}
int main()
{int tn, n, i, j, e;cin >> tn;while(tn--){op.clear();t.clear();init();cin >> n;for(int k = 1; k <= n; ++k){cin >> i >> j >> e;op.push_back(Node{i, j, e});t.push_back(i);t.push_back(j);}discretization();for(Node p : op) if(p.e == 1)//如果是xi=xj merge(p.i, p.j);cout << (isMatch() ? "YES" : "NO") << '\n';}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905264.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905264.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905264.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Java] 輸入輸出方法+猜數字游戲

目錄 1. 輸入輸出方法 1.1 輸入方法 1.2 輸出方法 2. 猜數字游戲 1. 輸入輸出方法 Java中輸入和輸出是屬于Scanner類里面的方法&#xff0c;如果要使用這兩種方法需要引用Scanner類。 import java.util.Scanner; java.util 是Java里面的一個包&#xff0c;里面包含一些工…

zst-2001 上午題-歷年真題 UML(13個內容)

UML基礎 UML - 第1題 ad UML - 第2題 依賴是暫時使用對象&#xff0c;關聯是長期連接 依賴&#xff1a;依夜情 關聯&#xff1a;天長地久 組合&#xff1a;組一輩子樂隊 聚合&#xff1a;好聚好散 bd UML - 第3題 adc UML - 第4題 bad UML - 第5題 d UML…

WebFlux vs WebMVC vs Servlet 對比

WebFlux vs WebMVC vs Servlet 技術對比 WebFlux、WebMVC 和 Servlet 是 Java Web 開發中三種不同的技術架構&#xff0c;它們在編程模型、并發模型和適用場景上有顯著區別。以下是它們的核心對比&#xff1a; 核心區別總覽 特性ServletSpring WebMVCSpring WebFlux編程模型…

htmlUnit和Selenium的區別以及使用BrowserMobProxy捕獲網絡請求

1. Selenium&#xff1a;瀏覽器自動化之王 核心定位&#xff1a; 跨平臺、跨語言的瀏覽器操控框架&#xff0c;通過驅動真實瀏覽器實現像素級用戶行為模擬。 技術架構&#xff1a; 核心特性&#xff1a; 支持所有主流瀏覽器&#xff08;含移動端模擬&#xff09; 精…

SSRF相關

SSRF(Server Side Request Forgery,服務器端請求偽造)&#xff0c;攻擊者以服務器的身份發送一條構造好的請求給服務器所在地內網進行探測或攻擊。 產生原理&#xff1a; 服務器端提供了能從其他服務器應用獲取數據的功能&#xff0c;如從指定url獲取網頁內容、加載指定地址的圖…

SaaS備份的必要性:廠商之外的數據保護策略

在當今數字化時代&#xff0c;企業對SaaS&#xff08;軟件即服務&#xff09;應用的依賴程度不斷攀升。SaaS應用為企業提供了便捷的生產力工具&#xff0c;然而&#xff0c;這也使得數據安全面臨諸多挑戰&#xff0c;如意外刪除、勒索軟件攻擊以及供應商故障等。因此&#xff0…

【Python 基礎語法】

Python 基礎語法是編程的基石&#xff0c;以下從核心要素到實用技巧進行系統梳理&#xff1a; 一、代碼結構規范 縮進規則 使用4個空格縮進&#xff08;PEP 8標準&#xff09;縮進定義代碼塊&#xff08;如函數、循環、條件語句&#xff09; def greet(name):if name: # 正確縮…

利用“Flower”實現聯邦機器學習的實戰指南

一個很尷尬的現狀就是我們用于訓練 AI 模型的數據快要用完了。所以我們在大量的使用合成數據&#xff01; 據估計&#xff0c;目前公開可用的高質量訓練標記大約有 40 萬億到 90 萬億個&#xff0c;其中流行的 FineWeb 數據集包含 15 萬億個標記&#xff0c;僅限于英語。 作為…

自動化測試與功能測試詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 什么是自動化測試? 自動化測試是指利用軟件測試工具自動實現全部或部分測試&#xff0c;它是軟件測試的一個重要組成 部分&#xff0c;能完成許多手工測試無…

MySQL全量,增量備份與恢復

目錄 一.MySQL數據庫備份概述 1.數據備份的重要性 2.數據庫備份類型 3.常見的備份方法 二&#xff1a;數據庫完全備份操作 1.物理冷備份與恢復 2.mysqldump 備份與恢復 3.MySQL增量備份與恢復 3.1MySQL增量恢復 3.2MySQL備份案例 三&#xff1a;定制企業備份策略思路…

Ubuntu 安裝 Nginx

Nginx 是一個高性能的 Web 服務器和反向代理服務器&#xff0c;同時也可以用作負載均衡器和 HTTP 緩存。 Nginx 的主要用途 用途說明Web服務器提供網頁服務&#xff0c;處理用戶的 HTTP 請求&#xff0c;返回 HTML、CSS、JS、圖片等靜態資源。反向代理服務器將用戶請求轉發到…

人工智能 機器學習期末考試題

自測試卷2 一、選擇題 1&#xff0e;下面哪個屬性不是NumPy中數組的屬性&#xff08; &#xff09;。 A&#xff0e;ndim B&#xff0e;size C&#xff0e;shape D&#xff0e;add 2&#xff0e;一個簡單的Series是由&#xff08; &#xff09;的數據組成的。 A&#xff0e;兩…

使用阿里云CLI調用OpenAPI

介紹使用阿里云CLI調用OpenAPI的具體操作流程&#xff0c;包括安裝、配置憑證、生成并調用命令等步驟。 方案概覽 使用阿里云CLI調用OpenAPI&#xff0c;大致分為四個步驟&#xff1a; 安裝阿里云CLI&#xff1a;根據您使用設備的操作系統&#xff0c;選擇并安裝相應的版本。…

K8S Svc Port-forward 訪問方式

在 Kubernetes 中&#xff0c;kubectl port-forward 是一種 本地與集群內資源&#xff08;Pod/Service&#xff09;建立臨時網絡隧道 的訪問方式&#xff0c;無需暴露服務到公網&#xff0c;適合開發調試、臨時訪問等場景。以下是詳細使用方法及注意事項&#xff1a; 1. 基礎用…

23、DeepSeek-V2論文筆記

DeepSeek-V2 1、背景2、KV緩存優化2.0 KV緩存&#xff08;Cache&#xff09;的核心原理2.1 KV緩存優化2.2 性能對比2.3 架構2.4多頭注意力 &#xff08;MHA&#xff09;2.5 多頭潛在注意力 &#xff08;MLA&#xff09;2.5.1 低秩鍵值聯合壓縮 &#xff08;Low-Rank Key-Value …

MySQL OCP試題解析(2)

試題如下圖所示&#xff1a; 一、題目背景還原 假設存在以下MySQL用戶權限配置&#xff1a; -- 創建本地會計用戶CREATE USER accountinglocalhost IDENTIFIED BY acc_123;-- 創建匿名代理用戶&#xff08;用戶名為空&#xff0c;允許任意主機&#xff09;CREATE USER % IDENTI…

深度學習Y7周:YOLOv8訓練自己數據集

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、配置環境 1.官網下載源碼 2.安裝需要環境 二、準備好自己的數據 目錄結構&#xff1a; 主目錄 data images&#xff08;存放圖片&#xff09; annotati…

英偉達Blackwell架構重構未來:AI算力革命背后的技術邏輯與產業變革

——從芯片暴力美學到分布式智能體網絡&#xff0c;解析英偉達如何定義AI基礎設施新范式 開篇&#xff1a;當算力成為“新石油”&#xff0c;英偉達的“煉油廠”如何升級&#xff1f; 2025年3月&#xff0c;英偉達GTC大會上&#xff0c;黃仁勛身披標志性皮衣&#xff0c;宣布了…

CurrentHashMap的整體系統介紹及Java內存模型(JVM)介紹

當我們提到ConurrentHashMap時&#xff0c;先想到的就是HashMap不是線程安全的&#xff1a; 在多個線程共同操作HashMap時&#xff0c;會出現一個數據不一致的問題。 ConcurrentHashMap是HashMap的線程安全版本。 它通過在相應的方法上加鎖&#xff0c;來保證多線程情況下的…

Android開發-設計規范

在Android應用開發中&#xff0c;遵循良好的設計規范不僅能夠提升用戶體驗&#xff0c;還能確保代碼的可維護性和擴展性。本文將從用戶界面&#xff08;UI&#xff09;、用戶體驗&#xff08;UX&#xff09;、性能優化以及代碼結構等多個維度探討Android開發中的設計規范&#…