C NOIP模擬題 間諜網路

2021-07-30 06:28:56 字數 2378 閱讀 7466

由於外國間諜的大量滲入,****正處於高度危機之中。如果a間諜手中掌握著關於b間諜的犯罪證據,則稱a可以揭發b。有些間諜接**賂,只要給他們一定數量的美元,他們就願意交出手中掌握的全部情報。所以,如果我們能夠收買一些間諜的話,我們就可能控制間諜網中的每一分子。因為一旦我們逮捕了乙個間諜,他手中掌握的情報都將歸我們所有,這樣就有可

能逮捕新的間諜,掌握新的情報。

我們的反間諜機關提供了乙份資料,包括所有已知的**的間諜,以及他們願意收受的具體數額。同時我們還知道哪些間諜手中具體掌握了哪些間諜的資料。假設總共有 n 個間諜( n 不超過 3000),每個間諜分別用 1 到 3000 的整數來標識。 

請根據這份資料,判斷我們是否可能控制全部的間諜,如果可以,求出我們所需要支付的最少資金。否則,輸出不能被控制的乙個間諜。

一行只有乙個整數 n 。 

第二行是整數 p。表示願意被收買的人數,1<=p<=n。 

接下來的 p 行,每行有兩個整數,第乙個數是乙個願意被收買的間諜的編號,第二個數表示他將會被收買的數額。這個數額不超過 20000。

緊跟著一行只有乙個整數 r,1<=r<=8000。然後 r 行,每行兩個正整數,表示數對(a,b),a 間諜掌握b間諜的證據。

如果可以控制所有間諜,第一行輸出 yes ,並在第二行輸出所需要支付的賄金最小值。否則輸出 no ,並在第二行輸出不能控制的間諜中,編號最小的間諜編號。

輸入

1 2 512 

2 1 2 

2 1

輸出

yes 

512

輸入

2 1 100 

4 200 

2 1 2 

3 4

輸出

no 

3

輸入

1 4 5435 

4 1 2 

2 3 

3 1 

5 2

輸出

no 

1

解題報告:

很明顯,這道題與節點的度有關。如果乙個點的入度為0,則我們必然要賄賂他。但是如果單純的考慮度就錯了。我們忽略了一種入度全部大於0的情況——環。樣例就是乙個例子。這時如果我們再拓撲找環再去找最小值,我們就會花大量時間(畢竟邊很多)。這時就要用到tarjan縮點。

tarjan是一種很高效的求解有向圖的強連通分量的演算法,但是它的主要應用之一是縮點,也就是把整個強連通分量的一定資訊集中到乙個點上,將其構成乙個新圖。由於所有強連通分量的並集是所有點的並集,所以整個圖的相應性質不變。

我們把圖g轉化成乙個由代表強連通分量的點構成的g』。我們只需記錄該分量中最小的節點權值。然後在g』中找到入度為0的點,列舉是否能被賄賂,如果不能則輸出no,否則累加,到最後輸出。

#include#includebool b[3001][3001];

int v[3001],f[3001],a[3001][3001];

int va[3001],du[3001],mc[3001],rd[3001],dfn[3001],low[3001],stack[3001];

int n,m,p,x,y,num,deep,nd,minn=1e9,tot;

inline int readint()

inline void put(int x)

inline void zoom(int x)

f[stack[num]]=false;

++l;

list[l]=stack[num];

--num;

for(int i=1;i<=l;++i)

for(int i=1;i<=l;++i)

for(int j=1;j<=l;++j)

if(i!=j&&b[list[i]][list[j]]) --d;

if(!d&&mini==1e9) minn=mint;

++nd;

du[nd]=d;

mc[nd]=mini;

}inline void dfs(int x)

else if(f[a[x][i]]) low[x]=std::min(low[x],dfn[a[x][i]]);

if(low[x]==dfn[x]) zoom(x);

}inline void get()

else }

int main()

for(i=1;i<=n;++i) if(!v[i]) dfs(i);

get();

return 0;

}

Luogu P1262 間諜網路

pre芝士 of tarjan 下方也有引用的 text 題目給了你乙個有向圖,乙個有環,而且只有部分點有點權,部分點沒有的乙個有向圖。你現在使用點 n 點權值大小的代價可以進行 將這個點以及這個點可以到達的所有點放入點集 mathbf e 中的操作,保證在點集 mathbf e 中的所有點能到達的...

P1262 間諜網路

傳送門 顯然可以把所有間諜的關係建乙個圖 如果a間諜手中掌握著關於b間諜的犯罪證據,那就從a連一條邊到b 如果賄賂了乙個間諜,那麼整個聯通塊的間諜肯定都被控制 那就先把圖縮成dag 如果控制了乙個塊,那麼這個塊後面所有的塊都能被控制 為了控制所有塊,一定要賄賂沒有入度的塊,因為它不能被其它塊控制到 ...

JZOJ 3910 Idiot 的間諜網路

作為一名高階 idiot 苦心經營多年,終於在敵國建立起一張共有n 名 的龐大間諜網路。當然,出於保密性的要求,間諜網路中的每名 最多隻會有一名直接領導。現在,idiot 希望整理有關歷次特別行動的一些資訊。初始時,間諜網路中的所有 都沒有直接領導。之後,共有m 次下列型別的事件按時間順序依次發生 ...