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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CSU 1081集训队分组(搜索)

發(fā)布時(shí)間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSU 1081集训队分组(搜索) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

集訓(xùn)隊(duì)分組

Time Limit:?2 Sec??Memory Limit:?128 MB

Description

中南大學(xué)ACM的暑期集訓(xùn)馬上就要開始了,這次集訓(xùn)會(huì)將全體N名集訓(xùn)隊(duì)員(編號(hào)分別為1, 2, …, N)按集訓(xùn)選拔賽的排名分成兩組,前K名隊(duì)員分入A組,其余隊(duì)員分入B組。

但現(xiàn)在助理教練CSGrandeur一不小心把集訓(xùn)選拔賽的排名弄丟了,而之前又沒將A組和B組的人員確定出來,于是CSGrandeur打算問一下集訓(xùn)人員他們的名次各是怎樣的,以此來確定一下A組的隊(duì)員。

然而集訓(xùn)隊(duì)員們都視名次如糞土,只是隱約記得某些人排在了自己的后面,最終反饋到CSGrandeur這里的一共有M條信息,每條信息都可以用一個(gè)二元組(x, y) (x!=y)表示,含義為第x名隊(duì)員記得第y名隊(duì)員的排名比自己的要靠后。

現(xiàn)在CSGrandeur想知道,根據(jù)這M條信息,是否可以確定出A組的隊(duì)員呢?(默認(rèn)所有集訓(xùn)隊(duì)員反映的信息都是符合事實(shí)的。)

Input

輸入包含多組測試數(shù)據(jù)。

對(duì)于每組測試數(shù)據(jù),第一行包含三個(gè)正整數(shù)N (2<=N<=1000)、K (1<=K<=N)、M (1<=M<=10000),含義同上。接下來M行每行有兩個(gè)正整數(shù)x、y (1<=x, y<=N且x!=y),分別描述了M條信息,對(duì)于每對(duì)x、y,均表示第x名隊(duì)員記得第y名隊(duì)員的排名比自己的要靠后。

Output

對(duì)于每組測試數(shù)據(jù),如果可以確定出A組的隊(duì)員,輸出“YES”(不包括引號(hào)),否則輸出“NO”(不包括引號(hào))。

Sample Input

3 1 2 1 2 1 3 3 2 2 1 2 1 3

Sample Output

YES NO

解法:從點(diǎn)x開始廣搜,如果從x可以到達(dá)的點(diǎn)有v個(gè),說明有v個(gè)點(diǎn)在x后面,如果v大于N-K,說明x在前k名中。

#include <cstdio> #include <cstring> #include <vector> #include <queue> using namespace std;const int MaxN = 1005; int vis[MaxN]; vector <int> Map[MaxN];//廣搜,返回從x出發(fā)可以到達(dá)多少個(gè)點(diǎn),即有多少個(gè)點(diǎn)在它后面 int BFS(int x) {queue <int> q;q.push(x);memset(vis, 0, sizeof(vis));vis[x] = 1;int cnt = 0;while(!q.empty()) {int nx = q.front(); q.pop();for(int i = 0; i < Map[nx].size(); ++i) {int xx = Map[nx][i];if(!vis[xx]) {q.push(xx);vis[xx] = 1;++cnt;}}}return cnt; }int main() {int N, K, M, x, y;while(~scanf("%d%d%d", &N, &K, &M)) {memset(Map, 0, sizeof(Map));for(int i = 0; i < M; ++i) {scanf("%d%d", &x, &y);Map[x].push_back(y);}int cnt = 0;for(int i = 1; i <= N; ++i) {if(BFS(i) >= N - K) ++cnt; //如果至少有N-K個(gè)結(jié)點(diǎn)在它之后,說明它就是前K個(gè)if(cnt == K) break;}if(cnt == K) puts("YES");else puts("NO");}return 0; }

總結(jié)

以上是生活随笔為你收集整理的CSU 1081集训队分组(搜索)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。