思維+并查集,1670C - Where is the Pizza?

一、題目

1、題目描述

2、輸入輸出

2.1輸入

2.2輸出

3、原題鏈接

1670C - Where is the Pizza?


二、解題報告

1、思路分析

考慮兩個數組a,b的每個位置只能從a,b中挑一個

不妨記posa[x]為x在a中位置,posb同理

我們假如位置i挑選a[i],那么會產生連鎖反應:

posb[a[i]]處不能選b,只能選a,繼而

postb[a[posb[a[i]]]] 處也不能選 b了,只能選a

...

由于是排列,最終一定會回到a[i]

也就是說我們在一個位置處選a或b可以得到1個環,而選a或者選b得到的環上元素的下標是一致的,不過得到的排列是兩個排列

也就是說,對于一個長度大于1的環(長度為1只能得到一種排列),我們有兩種選擇

對于本題,我們計算所有大于1且不含非0d[i]的環的數目cnt,答案就是2 ^ cnt mod 1e9+7

2、復雜度

時間復雜度: O(N)空間復雜度:O(N)

3、代碼詳解

??
#include <bits/stdc++.h>
using i64 = long long;
using i128 = __int128;
using PII = std::pair<int, int>;
const int inf = 1e9 + 7, P = 1e9 + 7;struct UnionFindSet {std::vector<int> p;int n;UnionFindSet(int _n) : p(_n, -1), n(_n) {}int find(int x) {return p[x] < 0 ? x : p[x] = find(p[x]);}void merge(int x, int y) {int px = find(x), py = find(y);if (px == py) return;if (p[px] > p[py]) std::swap(px, py);p[px] += p[py], p[py] = px;}int size(int x) {return -p[find(x)];}};int power (int a, i64 b, int p) {int res = 1;for (; b; b >>= 1, a = 1LL * a * a % p)if (b & 1)res = 1LL * res * a % p;return res;
}void solve() {int n;std::cin >> n;std::vector<int> a(n), b(n), d(n), posa(n), posb(n);for (int i = 0; i < n; i ++ ) std::cin >> a[i], posa[-- a[i]] = i;for (int i = 0; i < n; i ++ )std::cin >> b[i], posb[-- b[i]] = i;for (int i = 0; i < n; i ++ )std::cin >> d[i], -- d[i];UnionFindSet ufs(n);for (int i = 0; i < n; ++ i)ufs.merge(i, posb[a[i]]);std::unordered_set<int> st;for (int i = 0; i < n; ++ i)if (ufs.size(i) > 1)st.insert(ufs.find(i));for (int i = 0; i < n; ++ i)if (~d[i])st.erase(ufs.find(i));std::cout << power(2, st.size(), P) << '\n';
}int main(int argc, char** argv) {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int _ = 1;std::cin >> _;while (_ --)solve();return 0;
}

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

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

相關文章

【JS+H5+CSS實現煙花特效】

話不多說直接上代碼 注意:背景圖路徑是picture/star.jpg&#xff0c;自己在同級目錄先創鍵picture目錄再下載一張圖片命名為star.jpg HTML: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vi…

【LLM】三、open-webui+ollama搭建自己的聊天機器人

系列文章目錄 往期文章回顧&#xff1a; 【LLM】二、python調用本地的ollama部署的大模型 【LLM】一、利用ollama本地部署大模型 目錄 前言 一、open-webui是什么 二、安裝 1.docker安裝 2.源碼安裝 三、使用 四、問題匯總 總結 前言 前面的文章&#xff0c;我們已經…

探索Qt的QVariant:靈活的數據交換機制

&#x1f60e; 作者介紹&#xff1a;歡迎來到我的主頁&#x1f448;&#xff0c;我是程序員行者孫&#xff0c;一個熱愛分享技術的制能工人。計算機本碩&#xff0c;人工制能研究生。公眾號&#xff1a;AI Sun&#xff08;領取大廠面經等資料&#xff09;&#xff0c;歡迎加我的…

VMware使用技巧

目錄 1. 系統快照 1.1 拍攝快照 1.2 查看快照 1.3 應用/刪除快照 2. 克隆虛擬機 3. 刪除虛擬機 1. 系統快照 1.1 拍攝快照 將當前系統的狀態保存下來&#xff0c;如果將來系統出現不可修復的故障&#xff0c;使用快照可以恢復操作系統&#xff1b; CentOS7——拍照—…

【開源】基于RMBG的一鍵摳圖與證件照制作系統【含一鍵啟動包】

《博主簡介》 小伙伴們好&#xff0c;我是阿旭。專注于人工智能、AIGC、python、計算機視覺相關分享研究。 ?更多學習資源&#xff0c;可關注公-仲-hao:【阿旭算法與機器學習】&#xff0c;共同學習交流~ &#x1f44d;感謝小伙伴們點贊、關注&#xff01; 《------往期經典推…

【Linux】System V信號量詳解以及semget()、semctl()和semop()函數講解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

Kotlin構造函數

目錄 構造函數類型 主構造函數 成員變量設置 私有化操作 次級構造函數 構造函數類型 主構造函數&#xff08;主構造器&#xff09;——只能有一個次構造函數&#xff08;次構造器&#xff09;——可以是多個 主構造函數 構造器 constructor關鍵字前 無注解或修飾符作用&…

性能監控的革命:Eureka引領分布式服務監控新紀元

性能監控的革命&#xff1a;Eureka引領分布式服務監控新紀元 引言 在微服務架構中&#xff0c;服務的分布式性能監控對于維護系統健康和優化用戶體驗至關重要。Eureka作為Netflix開源的服務發現框架&#xff0c;為服務的注冊與發現提供了強大支持&#xff0c;而結合其他工具&…

數字化轉型:企業法務管理的未來發展 ???

在數字化浪潮的推動下&#xff0c;企業法務管理正經歷著前所未有的變革。傳統的法務工作模式在數據處理、合同審查、風險評估等方面逐漸顯得力不從心。面對這一挑戰&#xff0c;企業法務管理的數字化轉型成為提升效率、保障合規、優化法律服務的必然選擇。 數字化轉型涉及到法…

HTML(30)——動畫

動畫 實現步驟 定義動畫 keyframes 動畫名稱{ from{} to{} } keyframes 動畫名稱{ 0%{} 10%{} .... 100%{} } 2.使用動畫 animation:動畫名稱 動畫花費時間; 示例&#xff1a;盒子的寬度從200變到400px&#xff0c;兩個狀態一般用from to的形式 <style>.box {width: …

解析Xml文件并修改QDomDocument的值

背景&#xff1a; 我需要解決一個bug&#xff0c;需要我從xml中讀取數據到QDomDocument&#xff0c;然后獲取到我想要的目標信息&#xff0c;然后修改該信息。 ---------------------------------------------------------------------------------------------------------…

各大常用代碼編輯器的快捷鍵集合

visualstudio2017 快捷鍵 多行注釋 crtl / 取消多行注釋crtl Q 代碼跳轉返回 crtl /- visualcode快捷鍵 代碼跳轉返回 crtl 左鍵/右鍵 androidstudio快捷鍵 代碼跳轉返回 crtl alt 左鍵/右鍵

VUE中ECharts提示框tooltip自動切換

目錄 前言1導入插件2定義參數3 插件API 前言 使用VUE開發的數據大屏統計&#xff0c;又需要將 echarts的提示框 tooltip 實現自動切換&#xff0c;網上有個很簡單的插件&#xff08;echarts-tooltip-auto-show&#xff09;&#xff0c;使用教程簡單分享給大家。 自動每隔幾秒切…

哦華為倉頡語言

本來我不太想說的&#xff0c;奈何有不少粉絲提問提到了這語言&#xff0c;目前的情況我不透露太多&#xff0c;看過這課程C實現一門計算機編程語言到手擼虛擬機實戰的懂的自然懂。 在互聯網領域幾乎大部分應用軟件運行在X86 LINUX上居多&#xff0c;如果你有問題可以先學習這…

多版本python環境中,讓python3固定指向其中一個python可執行文件

如果你只安裝一個python環境&#xff0c;那么一般可執行文件名就叫python.exe和pythonw.exe 但是如果你有多個python環境時&#xff0c;可執行文件名是需要進行修改的&#xff0c;使得在安裝庫和調用時能夠分辨python環境&#xff0c;比如我的電腦中裝有python3.10和python2.x …

Transformer模型論文解讀、源碼分析和項目實踐

本文是ChatGPT系列的開篇之作&#xff0c;為什么吧Transformer放到這里呢&#xff0c;因為不管是chatgpt-1&#xff0c; chatgpt-2&#xff0c; chatgpt-3都是以Transformer作為底層基礎來實現&#xff0c;相當于chatgpt系列的老祖先了。如果想要深入的了解清楚chatgpt的來龍去…

AcWing 4173. 線段 (貪心)

數軸上有 n 條線段&#xff0c;選取其中 k 條線段使得這 k&#x1d458; 條線段兩兩沒有重合部分&#xff0c;問 k 最大為多少。 輸入格式 第一行為一個正整數 n&#xff1b; 在接下來的 n 行中&#xff0c;每行有 2 個數 ai,bi&#xff0c;描述每條線段的左右端點坐標。 輸…

BUUCTF[堆][of_by_one]

堆中of_by_one 介紹&#xff1a; 嚴格來說 off-by-one 漏洞是一種特殊的溢出漏洞&#xff0c;off-by-one 指程序向緩沖區中寫入時&#xff0c;寫入的字節數超過了這個緩沖區本身所申請的字節數并且只越界了一個字節。溢出字節為可控制任意字節 &#xff1a;通過修改大小(size…

token無感刷新方法

1.這里推薦去看這個老師的視頻,我的方案都是根據他的視頻來的視頻地址 2.這邊使用的工具是axios import axios from axios const service axios.create({baseURL: ,headers: {Authorization: token 你自己的token,},timeout: 1000 * 60, })// 攔截響應 service.interceptors…

Spring AOP源碼篇四之 數據庫事務

了解了Spring AOP執行過程&#xff0c;再看Spring事務源碼其實非常簡單。 首先從簡單使用開始, 演示Spring事務使用過程 Xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema…