COJ1081 集訓隊分組

2022-03-06 22:23:34 字數 1560 閱讀 5855

中南大學acm的暑期集訓馬上就要開始了,這次集訓會將全體n名集訓隊員(編號分別為1, 2, …, n)按集訓選拔賽的排名分成兩組,前k名隊員分入a組,其餘隊員分入b組。

但現在助理教練csgrandeur一不小心把集訓選拔賽的排名弄丟了,而之前又沒將a組和b組的人員確定出來,於是csgrandeur打算問一下集訓人員他們的名次各是怎樣的,以此來確定一下a組的隊員。

然而集訓隊員們都視名次如糞土,只是隱約記得某些人排在了自己的後面,最終反饋到csgrandeur這裡的一共有m條資訊,每條資訊都可以用乙個二元組(x, y) (x!=y)表示,含義為第x名隊員記得第y名隊員的排名比自己的要靠後。

現在csgrandeur想知道,根據這m條資訊,是否可以確定出a組的隊員呢?(預設所有集訓隊員反映的資訊都是符合事實的。)

輸入包含多組測試資料。

對於每組測試資料,第一行包含三個正整數n (2<=n<=1000)、k (1<=k<=n)、m (1<=m<=10000),含義同上。接下來m行每行有兩個正整數x、y (1<=x, y<=n且x!=y),分別描述了m條資訊,對於每對x、y,均表示第x名隊員記得第y名隊員的排名比自己的要靠後。

對於每組測試資料,如果可以確定出a組的隊員,輸出「yes」(不包括引號),否則輸出「no」(不包括引號)。

3 1 2

1 21 3

3 2 2

1 21 3

yes

no

數學模型:給定n個未知數,m組關係,沒組關係指出n個未知數中的2個的大小關係,例如a>b,求能否據此確定前k個數的集合?

一開始想到並查集,寫了好幾次都wa了,最後發現此題中的關係並不是等價關係。後來想到乙個類似的題,那題也是給定n個未知數和一些大小關係,要求的是能否確定所有數的大小關係。那題是用拓撲排序做的。用拓撲排序的方法很容易找出一組符合條件的解,關鍵在於如何判斷解的唯一性,如果解是唯一的,那麼剩下的n-k個數一定在所選的k個數的後面,也就是從這所選的k個數(圖中表示為結點)中任意乙個出發,可以遍歷到剩下的n-k個數。問題也就解決了。

view code

1 #include 2 #include 

3 #include 4

#define n 1001

5using

namespace

std;

6 vectorg[n];

7int

n,k,m,cnt,d[n],a[n],vis[n],flag[n];

8void dfs(intu)9

18}19int

main()

2029

for(i=0;i)

3035 memset(flag,0,sizeof

(flag));

36 cnt=0;37

while(cnt

3848}49

for(i=0;i)

5057

if(i"no"

);58

else puts("

yes"

);59}60

return0;

61 }

2011集訓隊出題 拆遷隊

lanxisi帶領著他的拆遷隊來整治乙個街道。這個街道由n個舊房子組成,從左到右編號為1.n。每個舊房子i有乙個正整數的美觀度ai。lanxisi希望整個街道從左到右美觀度嚴格遞增,也就是保證ai i。但是舊的街道明顯不符合這個要求,於是lanxisi希望拆遷一些舊房子並在原地建立新房子來滿足這一要...

2011集訓隊出題 happiness

高一一班的座位表是個n m的矩陣,經過乙個學期的相處,每個同學和前後左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對於選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那麼他們又將收穫一些喜悅值。作為計算機競賽教練的scp大老闆,想知道如何分配可以使得全班的喜悅值總...

2011集訓隊出題 happiness

description 高一一班的座位表是個n m的矩陣,經過乙個學期的相處,每個同學和前後左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對於選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那麼他們又將收穫一些喜悅值。作為計算機競賽教練的scp大老闆,想知道如何分...