題目傳送門:
這個題首先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,若果有乙個點並沒有被訪問過,說明這個點肯定不會被賄賂 直接輸出並結...