洛谷1262 間諜網路 tarjan縮點

2021-08-28 04:12:28 字數 1178 閱讀 9764

題目傳送門:

這個題首先tarjan縮個點,然後統計各個縮完之後的點的中被收買人的最小值,假如某個強連通分量的入度為0,那就收買他,我實在是太蒟蒻了想了半天怎麼判斷no的情況想不通一直卡在92,後來看了題解恍然大悟。假如乙個人不能被收買,那我就直接在targin的時候不搜這個點,那麼之後遍歷一遍dfn,如果存在0,就說明有乙個人既不能被舉報,也不能被收買,輸出no和編號即可。附上**:

#include#include#includeint s[100001]=,low[100001]=,dfn[100001]=,co[100001]=,buy[100001]=,d1[100001]=;

int x[100001]=,y[100001]=,nxt[100001]=,head[100001]=,to[100001]=,min1[100001]=,d2[100001]=;

int tmp=0,num=0,top=0,col=0,n,p,r;

int min(int x,int y)

int add(int x,int y)

int tarjan(int i)

else if(co[t]==0)

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

top--;

}return 0;

}int main()

scanf("%d",&r);

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

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

if(dfn[i]==0&&buy[i]!=0)

tarjan(i);

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

if(dfn[i]==0)

memset(head,0,sizeof(head));

memset(to,0,sizeof(to));

memset(nxt,0,sizeof(nxt));

tmp=0;

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

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

for(i=1;i<=col;i++)

}for(i=1;i<=col;i++)

if(d2[i]==0)

ans+=min1[i];

printf("yes\n");

printf("%d",ans);

return 0;

}

洛谷 P1262 間諜網路

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

洛谷 P1262 間諜網路

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

洛谷P1262 間諜網路

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