【最大半連通子圖——tarjan求最大連通分量,拓撲排序,樹形DP】

題目

分析

最大連通分量肯定是滿足半連通分量的要求,因此tarjan。

同時為了簡化圖,我們進行縮點,圖一定變為拓撲圖。

我們很容易看出,只要是一條不分叉的鏈,是滿足條件的。

于是我們按照拓撲序不斷樹形DP

建邊注意一下:

代碼

#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int N = 1e5+10;
const int M = 2e6+10; //要建兩次圖,第二次取決于第一次圖中強連通分量的個數,最壞情況下為1e6int dfn[N], sz[N], id[N], low[N], tot, cnt;
int stk[N], top;
bool in_stk[N];
int h[N], hs[N], e[M], ne[M], idx;
int n, m, mod;
int f[N], g[N];unordered_set<ll> s;
void add(int h[], int a, int b)  // 添加一條邊a->b
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
void tarjan(int u)
{dfn[u] = low[u] = ++tot;stk[++top] = u, in_stk[u] = 1;for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(!dfn[j]){tarjan(j);low[u] = min(low[u], low[j]);}else if(in_stk[j])low[u] = min(low[u], dfn[j]);}if(dfn[u] == low[u]){++cnt;int y;do{y = stk[top--];sz[cnt]++;id[y] = cnt;in_stk[y] = 0;}while(y != u);}
}
int main()
{memset(h, -1, sizeof h);memset(hs, -1, sizeof hs);scanf("%d%d%d", &n, &m, &mod);for(int i = 1; i <= m; i++){int a, b;scanf("%d%d", &a, &b);add(h, a, b);}for(int i = 1; i <= n; i++)if(!dfn[i])tarjan(i);for(int u = 1; u <= n; u++) //遍歷所有邊,挑選出不同連通分量之間的邊for(int i = h[u]; ~i; i = ne[i]){int j = e[i];int uid = id[u], jid = id[j];ll hash = 1ll * uid * N + jid; //防止反復加入if(uid != jid && !s.count(hash)){s.insert(hash);add(hs, uid, jid);}}for(int u = cnt; u; u--){if(!f[u]){f[u] = sz[u]; //節點數g[u] = 1; //圖數}for(int i = hs[u]; ~i; i = ne[i]){int j = e[i];if(f[j] < f[u] + sz[j]){f[j] = (f[u] + sz[j]) % mod;g[j] = g[u];}else if(f[j] == f[u] + sz[j])g[j] = (g[j] + g[u]) % mod;}}int ans1 = 0, ans2 = 0;for(int i = 1; i <= cnt; i++){if(f[i] > ans1){ans1 = f[i];ans2 = g[i];}else if(f[i] == ans1)ans2 = (ans2 + g[i]) % mod;}printf("%d\n%d", ans1, ans2);
}

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

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

相關文章

LabVIEW正弦信號處理:FFT與最小二乘擬合的參數提取

問題一&#xff1a;LabVIEW能否對采集的正弦力信號進行快速傅里葉變換&#xff08;FFT&#xff09;&#xff0c;并得到幅值和相位結果&#xff1f; 答案&#xff1a; 可以。LabVIEW通過內置信號處理工具包提供完整的FFT分析功能&#xff0c;具體實現如下&#xff1a; FFT分析流…

Nginx+PHP+MYSQL-Ubuntu在線安裝

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步驟如下&#xff1a; 1. 更新系統包 首先&#xff0c;確保系統包是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安裝 Nginx 安裝 Nginx&#xff1a; sudo apt install nginx啟動并啟用 Nginx 服務&#xff1a; sudo…

第002文-kali虛擬機安全與網絡配置

1、kali系統介紹 kali是一個基于Linux kernel的操作系統&#xff0c;由BackTrack(簡稱BT)發展而來。BackTrack是2006年推出的一個用于滲透測試及黑客攻防的專用平臺&#xff0c;基于Knoppix(linux的一個發行版)開發。BackTrack版本周期&#xff1a;2006年的起始版本BackTrack …

怎么下載安裝yarn

安裝 npm install --global yarn 是否安裝成功 yarn -v Yarn 淘寶源安裝&#xff0c;分別復制粘貼以下代碼行到黑窗口運行即可 yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/…

Odoo免費開源CRM技術實戰:從商機線索關聯轉化為售后工單的應用

文 / 開源智造 Odoo金牌服務 Odoo&#xff1a;功能強大且免費開源的CRM Odoo 引入了一種高效的客戶支持管理方式&#xff0c;即將 CRM 線索轉換為服務臺工單。此功能確保銷售和支持團隊能夠無縫協作&#xff0c;從而提升客戶滿意度并縮短問題解決時間。通過整合 CRM 模塊與服…

ArcGIS Pro實戰技巧:靈活運用線條精準分割與裁切面要素

在地理信息系統&#xff08;GIS&#xff09;的應用中&#xff0c;我們經常需要對地圖上的面要素進行精確的分割或裁切。 ArcGIS Pro作為一款強大的GIS軟件&#xff0c;提供了多種工具來滿足這一需求。 本文將詳細介紹如何在ArcGIS Pro中使用線要素對面要素進行分割和裁切&…

基于python的網絡爬蟲爬取天氣數據及可視化分析(Matplotlib、sk-learn等,包括ppt,視頻)

基于Python爬取天氣數據信息與可視化分析&#xff08;文末完整源碼&#xff09; 基于python的網絡爬蟲爬取天氣數據及可視化分析 可以看看演示視頻。 摘要 基于Python爬取天氣數據信息與可視化分析 本論文旨在利用Python編程語言實現天氣數據信息的爬取和可視化分析。天氣…

Angular Loss論文理解

Angular Loss論文理解 一、相較于Triplet loss二、Angular loss的意義三、Angular loss的優點四、Angular Loss五、實施細節六、訓練細節七、未來構想 一、相較于Triplet loss Triplet loss在訓練時&#xff0c;收斂較難 每個三元組需要三次抽樣&#xff0c;然而將某個數據集…

加入二極管的NE555 PWM 電路

只用電阻、電容構成的一般定時電路的占空比無法低于50%&#xff0c;如下圖&#xff1a; 電容的充電路徑上串聯了R1 和R2&#xff0c;而放電路徑上只有R2&#xff0c;所以放電的時間不可能比充電長。加入二極管就能解決這個問題&#xff0c;用二極管把充電和放電路徑分離開&…

本地部署大語言模型-DeepSeek

DeepSeek 是國內頂尖 AI 團隊「深度求索」開發的多模態大模型&#xff0c;具備數學推理、代碼生成等深度能力&#xff0c;堪稱"AI界的六邊形戰士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服務器提供多種計費模式。 DeepSeek-R1-32B配置 配置項 規…

[AI機器人] Web-AI-Robot機器人前瞻版--比奇堡海之霸凱倫

文章目錄 簡述開源Web-AI-Robot 項目-比奇堡-海之霸-凱倫 技術架構效果預覽 簡述 本項目配合前端項目bikini_bottom_karen_ui運行&#xff0c;來源于柒杉工作室&#xff08;截止2025.2&#xff0c;目前我自己&#xff09;。 打造一個只需要在瀏覽器上運行的AI智能機器人&#…

250302-綠聯NAS通過Docker配置SearXNG及適配Open-WebUI的yaml配置

A. 配置Docker中的代理 綠聯NAS簡單解決docker無法獲取鏡像-不用軟路由 - 嗶哩嗶哩 B. 下載官網對應的鏡像 群暉NAS用docker搭建SearXNG元搜索引擎_嗶哩嗶哩_bilibili C. 修改默認省略的參數&#xff0c;只配置Base_URL&#xff0c;刪除其它默認的空缺項 searxng-docker/REA…

java容器 LIst、set、Map

Java容器中的List、Set、Map是核心數據結構&#xff0c;各自適用于不同的場景 一、List&#xff08;有序、可重復&#xff09; List接口代表有序集合&#xff0c;允許元素重復和通過索引訪問&#xff0c;主要實現類包括&#xff1a; ArrayList 底層結構&#xff1a;動態數組…

3471. 找出最大的幾近缺失整數

3471. 找出最大的幾近缺失整數 class Solution:# 輔助方法&#xff0c;判斷第三種情況&#xff0c;只有首位兩個元素有可能為最大幾近缺失數def f(self,nums,x):return -1 if x in nums else xdef largestInteger(self, nums: List[int], k: int) -> int:n len(nums)if k …

【異常錯誤】No module named ‘taming.modules.vqvae‘

錯誤&#xff1a; File "/mnt/d/Pycharm_workspace/text2image/OmniGen-version/OmniGen/latentDiffusion/ldm/models/autoencoder.py", line 6, in <module> from taming.modules.vqvae.quantize import VectorQuantizer2 as VectorQuantizer ModuleNotF…

快檢查達夢庫怎么了

扁鵲的弟弟來了 要求5分鐘定位達夢數據庫問題 #!/bin/bash## content 實例個數 告警日志 實例狀態 用戶連接 活動會話 鎖 集群狀態 服務狀態 磁盤空間 cpu mem 偵聽及日志 ## scope 單機、DW、DSC Linux 多實例 ## example 將腳本保存為d.sh&#xff0c;用root用執行&#…

C++20中`constexpr`的顯著增強

文章目錄 1. **更多標準庫函數支持constexpr**2. **支持動態內存分配**3. **支持虛函數和多態**4. **支持try-catch異常處理**5. **更靈活的控制流**6. **支持std::initializer_list**7. **支持修改union活躍成員**8. **允許更多類型的非類型模板參數**總結 C20對 constexpr進…

Tomcat 亂碼問題徹底解決

1. 終端亂碼問題 找到 tomcat 安裝目錄下的 conf —> logging.properties .修改ConsoleHandler.endcoding GBK &#xff08;如果在idea中設置了UTF-8字符集&#xff0c;這里就不需要修改&#xff09; 2. CMD命令窗口設置編碼 參考&#xff1a;WIN10的cmd查看編碼方式&…

以太坊測試網

文章目錄 什么是測試網如何使用測試網獲取測試以太幣 什么是測試網 測試網&#xff08;Testnet&#xff09;是一個模擬以太坊主網&#xff08;Mainnet&#xff09;行為的區塊鏈網絡。它允許開發人員和用戶在不使用真實資金的情況下測試智能合約和應用程序。雖然測試網上的代幣…

算法隨筆_62: 買賣股票的最佳時機

上一篇:算法隨筆_61:二進制求和-CSDN博客 題目描述如下: 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲…