邏輯的聯通性

2021-07-26 08:17:35 字數 2601 閱讀 8213

假如有命題p 一定能推出命題q,則稱p 是q 的充分條件,q 是p 的必要條件。

特別的,當p 既是q 的充分條件,又是q 的必要條件時,稱p 和q 互為充要條件

現在有n 個命題,其中一些是另一些的充分條件。請問有多少對命題互為充要條件?

第一行三個正整數n,m,分別表示命題數、已知關係數

接下來m 行,每行兩個正整數p 和q,表示命題p 是命題q 的充分條件

5 5

1 3

3 2

2 1

4 5

5 4僅一行,乙個整數,表示充要條件的對數

4 樣例說明:

4 對充要條件分別是(1, 2)、(2, 3)、(1, 3)、(4, 5)

對於10% 的資料,n <= 10;m <= 50

對於40% 的資料,n <= 500;m <= 1000

對於另外10% 的資料,資料中保證沒有重邊且m = n^2

對於100% 的資料,n<= 50000;m <= 600000

其實這個題就是讓我們找圖中的環,我們可以用tarjan的演算法,找到每個擁有的節點個數n,加上n(

n−1)

/2那麼講一下tarjan演算法:

tarjan演算法基於定理:在任何深度優先搜尋中,同一強連通分量內的所有頂點均在同一棵深度優先搜尋樹中。也就是說,強連通分量一定是有向圖的某個深搜樹子樹。

這樣,我們用low值記錄該點所在強連通子圖對應的搜尋子樹的根節點的dfn值。注意,該子樹中的元素在棧中一定是相鄰的,且根節點在棧中一定位於所有子樹元素的最下方。

強連通分量是由若干個環組成的。所以,當有環形成時(也就是搜尋的下乙個點已在棧中),我們將這一條路徑的low值統一,即這條路徑上的點屬於同乙個強連通分量。

如果遍歷完整個搜尋樹後某個點的dfn值等於low值,則它是該搜尋子樹的根。這時,它以上(包括它自己)一直到棧頂的所有元素組成乙個強連通分量。

var

i,j,n,m,tot,l,bz1,p,num:longint;

ans:int64;

tov,next,last:array[0..600000]of longint;//形成邊的鏈結陣列,詳見(spfa)

bz,zb:array[0..50000]of boolean;//bz為是否訪問,zb為是否在棧中

f,x,y,low,dfn:array[0..50000]of longint;//dfn為時間戳,low為祖先,f為棧

function

min(a,b:longint):longint;

begin

if a>b then

exit(b);

exit(a);

end;

procedure

tarjan

(x:longint);

//tarjan

var y,i,xx,v:longint;

begin

inc(num);

dfn[x]:=num;

low[x]:=num;

bz[x]:=true;

inc(p);

f[p]:=x;

i:=last[x];

zb[x]:=true;

while i<>0

dobegin

y:=tov[i];

if bz[y]=false

then

//未被訪問

begin

tarjan(y);

low[x]:=min(low[x],low[y]);

endelse

if zb[y] then

low[x]:=min(low[x],dfn[y]);

i:=next[i];

end;

if low[x]=dfn[x] then

//已經找到乙個強連通分量,彈棧。

begin

xx:=0;

repeat

v:=f[p];

zb[v]:=false;

dec(p);

inc(xx);

until x=v;

ans:=ans+xx*(xx-1) shr

1; end;

end;

procedure

insert

(x,y:longint);

begin

inc(tot);

tov[tot]:=y;

next[tot]:=last[x];

last[x]:=tot;

end;

begin

readln(n,m);

for i:=1

to m do

begin

readln(x[i],y[i]);

insert(x[i],y[i]);//形成連通圖

end;

tarjan(1);

for i:=1

to n do

if bz[i]=false

then

tarjan(i);

writeln(ans);

end.

測試埠聯通性

linux系統測試埠連通性的方法 有四種常用方法 1.telnet 方法 2.wget 方法 3.ssh 方法 4.curl 方法 下面一一介紹。1.telnet 用法 telnet ip port 1 連線不存在的埠 telnet 1.1.1.1 8 trying 1.1.1.1.telnet c...

風險度量 (判斷聯通性)

x星系的的防衛體系包含 n 個空間站。這 n 個空間站間有 m 條通訊鏈路,構成通訊網。兩個空間站間可能直接通訊,也可能通過其它空間站中轉。對於兩個站點x和y x y 如果能找到乙個站點z,使得 當z被破壞後,x和y無法通訊,則稱z為關於x,y的關鍵站點。顯然,對於給定的兩個站點,關於它們的關鍵點的...

例項的網路聯通性問題

9月8日更新 解釋及解決辦法 解釋 openstack中有兩種ip位址的概念 fixed ip和floating ip。fixed ip 是例項的真實ip,在建立例項時注入,如果作業系統不支援注入如windows,openstack會在例項啟動後通過dhcp方式把fixed ip分配給例項。floa...