洛谷 P1262 間諜網路

2021-07-14 10:58:40 字數 2147 閱讀 3146

題目描述

由於外國間諜的大量滲入,****正處於高度的危機之中。如果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:

【樣例1】

3 2

1 10

2 100

2 1 3

2 3

【樣例2】

4 2

1 100

4 200

2 1 2

3 4輸出樣例#1:

【樣例1】

yes

110

【樣例2】

no 3

先對每乙個願意**的間諜dfs,判斷是否可以控制全部間諜。

若可以,用tarjan找環,縮點,入度為零的點的費用之和就是最小費用。

#include

#include

#include

#include

#include

using

namespace

std;

struct spy

a[3001];

vector

v[3001];

stack

stk;

int n,p,r,ans,dcnt,tim,dfn[3001],low[3001],belong[3001],cst[3001],x[8001],y[8001];

bool b[3001],instack[3001],***[3001];

void dfs(int u)

void tarjan(int u)

else

if(instack[j])

low[u]=min(low[u],dfn[j]);

}if(dfn[u]==low[u])

}}int main()

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

dfs(a[i].num);

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

if(!b[i])

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

if(dfn[i]==0)

tarjan(i);

memset(cst,0x7f,sizeof(cst));

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

cst[belong[a[i].num]]=min(cst[belong[a[i].num]],a[i].w);

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

if(belong[x[i]]!=belong[y[i]])

***[belong[y[i]]]=1;

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

if(!***[i])

ans+=cst[i];

printf("yes\n%d\n",ans);

return

0;}

洛谷 P1262 間諜網路

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

洛谷P1262 間諜網路

給定n個點 其中p個點可以被賄賂,被賄賂的金額為x,如果乙個點被賄賂,他所指向的點也會被賄賂 求 如果不能全部被賄賂 輸出no以及不能被賄賂的點 否則輸出yes和需要支付的金額的最小值 我們可以通過tarjan縮點,最後掃一遍dfn,若果有乙個點並沒有被訪問過,說明這個點肯定不會被賄賂 直接輸出並結...

P1262 間諜網路

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