由於外國間諜的大量滲入,****正處於高度危機之中。如果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 ,並在第二行輸出不能控制的間諜中,編號最小的間諜編號。
輸入
2輸出1 2 512
2 1 2
2 1
yes512
輸入
4輸出2 1 100
4 200
2 1 2
3 4
no3
輸入
5輸出1 4 5435
4 1 2
2 3
3 1
5 2
no1
解題報告:很明顯,這道題與節點的度有關。如果乙個點的入度為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 次下列型別的事件按時間順序依次發生 ...