T24412 Cup#182-3 洞穴之旅

弱連通模板題,不過還是不會。。。


這道題在POJ2762有,這個出題人直接翻譯弄過來了。。。

弱連通的定義是:從u能到達v從v能到達u,則u和v這兩個點弱連通。

顯然如果是強連通分量就一定是弱連通分量啦,所以可以直接縮點弄掉。

縮點后的DAG中,可能會不符合條件的不可能被我們縮掉。

那么對于這個DAG,發現只有兩個或多個邊連入某個點的話,就不符合這個條件。

所以對一個新圖弄一個toposort,一旦通過同一個點刪邊的過程添加了兩個以上的點的話,就絕對不符合條件。

代碼:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
const int maxn = 10005, maxm = 100005;
struct Edges
{int next, from, to;
} e[maxm], e2[maxm];
int head[maxn], tot;
int head2[maxn], tot2;
int n, m;
int dfn[maxn], low[maxn], dtot;
bool vis[maxn];
int color[maxn], ctot;
int indegree[maxn];
std::stack<int> s;
int read()
{int ans = 0, s = 1;char ch = getchar();while(ch > '9' || ch < '0'){if(ch == '-') s = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){ans = ans * 10 + ch - '0';ch = getchar();}return s * ans;
}
void init()
{memset(head, 0, sizeof(head));memset(head2, 0, sizeof(head2));memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));memset(color, 0, sizeof(color));memset(indegree, 0, sizeof(indegree));tot = tot2 = dtot = ctot = 0;while(!s.empty()) s.pop();
}
void link(int u, int v)
{e[++tot] = (Edges){head[u], u, v};head[u] = tot;
}
void link2(int u, int v)
{e2[++tot2] = (Edges){head2[u], u, v};head2[u] = tot2;
}
void tarjan(int u)
{dfn[u] = low[u] = ++dtot;s.push(u); vis[u] = true;for(int i = head[u]; i; i = e[i].next){int v = e[i].to;if(!dfn[v]){tarjan(v);low[u] = std::min(low[u], low[v]);}else if(vis[v]) low[u] = std::min(low[u], dfn[v]);}if(low[u] == dfn[u]){ctot++;while(s.top() != u){int x = s.top(); s.pop();vis[x] = false; color[x] = ctot;}int x = s.top(); s.pop();vis[x] = false; color[x] = ctot;}
}
bool toposort()
{std::queue<int> q;int cnt = 0, count = 0;for(int i = 1; i <= ctot; i++){if(indegree[i] == 0){q.push(i);cnt++;}}if(cnt > 1) return false;while(!q.empty()){count++;cnt = 0;int u = q.front(); q.pop();for(int i = head2[u]; i; i = e2[i].next){int v = e2[i].to;indegree[v]--;if(indegree[v] == 0){q.push(v); cnt++;}}if(cnt > 1) return false;}if(count == ctot) return true;
}
int main()
{//freopen("in.txt", "r", stdin);int T = read();while(T--){init();n = read(), m = read();while(m--){int u = read(), v = read();link(u, v);}for(int i = 1; i <= n; i++){if(!dfn[i]) tarjan(i);}//for(int i = 1; i <= n; i++) printf("%d\n", color[i]);for(int i = 1; i <= tot; i++){int u = e[i].from, v = e[i].to;if(color[u] != color[v]){link2(color[u], color[v]);indegree[color[v]]++;}}if(toposort()) printf("Yes\n");else printf("No\n");}return 0;
}

轉載于:https://www.cnblogs.com/Garen-Wang/p/9461792.html

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

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

相關文章

PCB相關的基礎知識

http://www.elecfans.com/article/89/92/2017/20170425510728.html轉載于:https://www.cnblogs.com/jackn-crazy/p/7300228.html

sql server 修改表結構語法大全

1.增加字段 alter table docdsp add dspcode char(200) 2.刪除字段 alter table table_name drop column column_name 3.修改字段類型 alter table table_name alter column column_name new_data_type 2.6.1. 增加字段 要增加一個字段&#xff0c;使用這條命令…

Flutter - 生成二維碼與識別二維碼

#生成二維碼 ##首先需要在pubspec.yaml:中添加 qr_flutter: ^1.1.3 其次&#xff0c;引入代碼&#xff1a; import package:qr_flutter/qr_flutter.dart; 核心代碼如下&#xff1a; child: QrImage(data: "這里是需要生成二維碼的數據",size: 100.0,onError: (ex) {p…

任意小數分頻設計

對于任意小數分頻&#xff0c;如果有PLL的話&#xff0c;直接倍頻再分頻即可&#xff1b;或常用的方法有雙模前置小數分頻和脈沖刪除小數分頻。前一種方法設計較為復雜&#xff0c;因此主要以第二種方式為主設計了一下。 任意小數均可以化為分數&#xff0c;例如要進行5.3分頻即…

Bootstrap--圓角圖片`圓形圖

轉載于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

邏輯綜合——概述與基本概念

邏輯綜合系列主要說明以下問題&#xff1a; 為什么要邏輯綜合邏輯綜合的基本原理邏輯綜合需要提供哪些文件邏輯綜合過程中施加約束邏輯綜合能產生那些結果 綜合是前端設計的重要步驟之一&#xff0c;其過程是將行為描述的電路、RTL級的電路轉換到門級&#xff0c;其目的在于&a…

Swoole 源碼分析——Server模塊之初始化

前言 本節主要介紹 server 模塊進行初始化的代碼&#xff0c;關于初始化過程中&#xff0c;各個屬性的意義&#xff0c;可以參考官方文檔&#xff1a; SERVER 配置選項 關于初始化過程中&#xff0c;用于監聽的 socket 綁定問題&#xff0c;可以參考&#xff1a; UNP 學習筆記—…

linux下搭建git服務器

安裝 Git Linux 做為服務器端系統&#xff0c;Windows 作為客戶端系統&#xff0c;分別安裝 Git 服務器端&#xff1a; #yum install -y git 安裝完后&#xff0c;查看 Git 版本 [rootlocalhost ~]# git --version git version 1.7.1 客戶端&#xff1a; 下載 Git for Windows&…

mkcramfs 命令學習

mkcramfs :創建只讀文件系統 語 法 mkcramfs[必要參數][選擇參數][源目錄][目標文件]功 能mkcramfs 命令&#xff1a;用來創建CRAMFS只讀文件系統 類似命令: fdisk cramfsck mount 執行權限: 超級用戶 普通用戶 命令屬性: 磁盤維護 參數必要參數 -e 設置文件系…

對于Eclipse的正確用法

有時候我們剛剛修改了工程里的文件 但是啟動的時候它硬是說你有東西沒有聲明 而那個東西又明明在那里。。 這時候我們可以認為實際與它調用的工程關系文件&#xff08;我假想的&#xff09; 不同步。。 我們可以通過clean功能來同步實際情況和工程關系文件 所以說我們每次改了之…

邏輯綜合——工藝庫

一、庫文件的設置 運行DC時需要用到的庫文件有&#xff1a;目標庫&#xff08;target library&#xff09;、鏈接庫&#xff08;link library&#xff09;、符號庫&#xff08;symbol library&#xff09;、算術運算庫&#xff08;synthetic library&#xff09;。 1、目標庫…

weka 初練之 文本分類

0.注意weka的中文編碼RunWeka.ini-----》fileEncodingutf-81.首先對分詞后的 無新詞發現的分詞文件&#xff0c;轉換成arff文件 命令java weka.core.converters.TextDirectoryLoader -dir D:\weibo\catagory\data10W\nlpirSegment\noNI > D:\weibo\catagory\data10W\nlpirSe…

[COGS 0065][NOIP 2002] 字串變換

65. [NOIP2002] 字串變換 ★★ 輸入文件&#xff1a;string.in 輸出文件&#xff1a;string.out 簡單對比時間限制&#xff1a;1 s 內存限制&#xff1a;128 MB [問題描述] 已知有兩個字串A\$, B\$及一組字串變換的規則&#xff08;至多6個規則&#xff09;: A1\$ ->…

基與datatable的分頁

在進行分頁操作前&#xff0c;必須知道開啟服務器模式后會向服務器發送的參數的含義&#xff1a; length:告訴服務器每頁顯示的數據條數 start&#xff1a;第一條數據的起始位置 draw:繪制計數器&#xff0c;&#xff08;特殊&#xff1a;服務器接收到參數后&#xff0c;需要返…

linux sock_raw原始套接字編程

sock_raw原始套接字編程可以接收到本機網卡上的數據幀或者數據包,對與監聽網絡的流量和分析是很有作用的.一共可以有3種方式創建這種socket1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)發送接收ip數據包2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|E…

邏輯綜合——施加約束

Design Compiler時一個約束驅動&#xff08;constraint-driven&#xff09;的綜合工具&#xff0c;它的結果與設計者施加的約束條件密切相關。 一、面積約束 進行面積的約束&#xff0c;也就是告訴DC綜合的電路面積要在多少以內。在介紹約束命令之前&#xff0c;先了解一下面積…

[Codevs] 1004 四子連棋

1004 四子連棋 時間限制: 1 s空間限制: 128000 KB題目等級 : 黃金 Gold題目描述 Description在一個4*4的棋盤上擺放了14顆棋子&#xff0c;其中有7顆白色棋子&#xff0c;7顆黑色棋子&#xff0c;有兩個空白地帶&#xff0c;任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰…

鏈接中獲取文件名

算得上是-test.pdf 獲取文件名 var str http://aaa.com/s/ddd/算得上是-test.pdf; console.log(str.match(/([^/*.])\.\w$/)) console.log(str.match(/([^/*.])\.\w$/)[0]) // 轉載于:https://www.cnblogs.com/cssfirefly/p/6163370.html

邏輯綜合——優化電路

對進行時序路徑、工作環境、設計規則等進行約束完成之后&#xff0c;DC就可以進行綜合、優化時序了&#xff0c;DC在優化過程中主要的策略將在下面進行說明。然而&#xff0c;當普通模式下不能進行優化的&#xff0c;就需要我們進行編寫腳本來改進DC的優化來達到時序要求。 DC…