日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EZ的间谍网络(codevs 4093)

發布時間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EZ的间谍网络(codevs 4093) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于外國間諜的大量滲入,學校安全正處于高度的危機之中。YJY決定挺身而作出反抗。如果A間諜手中掌握著關于B間諜的犯罪證據,則稱A可以揭發B。有些間諜收受賄賂,只要給他們一定數量的美元,他們就愿意交出手中掌握的全部情報。所以,如果我們能夠收買一些間諜的話,我們就可能控制間諜網中的每一分子。因為一旦我們逮捕了一個間諜,他手中掌握的情報都將歸我們所有,這樣就有可能逮捕新的間諜,掌握新的情報。

  我們的神通廣大的YJY獲得了一份資料,色括所有已知的受賄的間諜,以及他們愿意收受的具體數額。同時我們還知道哪些間諜手中具體掌握了哪些間諜的資料。假設總共有n個間諜(n不超過3000),每個間諜分別用1到3000的整數來標識。

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

?

輸入描述?Input Description

第一行只有一個整數n。

  第二行是整數p。表示愿意被收買的人數,1≤p≤n。

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

  緊跟著一行只有一個整數r,1≤r≤8000。然后r行,每行兩個正整數,表示數對(A, B),A間諜掌握B間諜的證據。

?

輸出描述?Output Description

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

?

樣例輸入?Sample Input

【樣例1】

3

2

1 10

2 100

2

1 3

2 3

【樣例2】

4

2

1 100

4 200

2

1 2

3 4

?

?

樣例輸出?Sample Output

【樣例1】

YES

110

?

【樣例2】

NO<a name="_GoBack"></a>

3

#include<cstdio> #include<iostream> #include<vector> #include<stack> #include<cstring> #define M 3010 using namespace std; int low[M],num[M],money[M],vis[M],instack[M],belong[M],in[M],out[M],value[M]; int n,cnt,indexx; vector<int> grap[M]; stack<int> s; void tarjan(int v) {low[v]=num[v]=++indexx;vis[v]=1;instack[v]=1;s.push(v);for(int i=0;i<grap[v].size();i++){int w=grap[v][i];if(!vis[w]){tarjan(w);low[v]=min(low[v],low[w]);}else if(instack[w])low[v]=min(low[v],num[w]);}int u;if(low[v]==num[v]){cnt++;do{u=s.top();belong[u]=cnt;if(money[u])value[cnt]=min(value[cnt],money[u]);s.pop();instack[u]=0;}while(u!=v);} } int main() {memset(value,0x7f,sizeof(value));int p,m;scanf("%d%d",&n,&p);for(int i=1;i<=p;i++){int x,y;scanf("%d%d",&x,&y);money[x]=y;}scanf("%d",&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);grap[x].push_back(y);}for(int i=1;i<=n;i++)if(!vis[i]) tarjan(i);for(int i=1;i<=n;i++)for(int j=0;j<grap[i].size();j++)if(belong[i]!=belong[grap[i][j]]){out[belong[i]]++;in[belong[grap[i][j]]]++;}int ans=0,who=M;for(int i=1;i<=cnt;i++)if(!in[i]){if(value[i]<=20000)ans+=value[i];else{ for(int j=1;j<=n;j++)if(belong[j]==i)who=min(who,j);}}if(who<M)printf("NO\n%d",who);else printf("YES\n%d",ans);return 0; } View Code

?

轉載于:https://www.cnblogs.com/harden/p/5596805.html

總結

以上是生活随笔為你收集整理的EZ的间谍网络(codevs 4093)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。