問題 B 萬妖穴

2021-07-27 17:01:39 字數 1448 閱讀 8589

時間限制:1 sec

記憶體限制:64 mb

提交:977

解決:232

提交狀態

「萬妖穴中有若干**,每處**中皆有乙隻惡妖。**外設有封印,汝需消滅指定幾處**中的惡妖方能解除該**封印,進而消滅穴中惡妖。」

「此處石壁所刻便是萬妖穴中各穴的封印解除關係。」

「萬妖穴中或有部分**未設封印,汝可以此作為突破口。」

「吾將根據石壁所示,將各穴消滅順序給予汝,汝自珍重。」

每個輸入檔案中一組資料。

第一行兩個正整數n、m(1<=n<=1000,0<=m<=n*(n-1)),表示萬妖穴中**的個數及封印解除關係的條數。

接下來m行,每行兩個整數a、b,表示**b封印的解除依賴於消滅**a中的惡妖。假設n處**的編號分別是0~n-1。資料保證a不等於b,且每組封印解除關係a b最多出現一次。

如果能夠消滅所有**,那麼輸出一行yes,並在第二行給出用空格隔開的n處**的消滅順序(此處規定,總是消滅當前能消滅的編號最小的**);如果不能消滅所有**,那麼輸出一行no,並在第二行給出無法解除封印的**個數。行末均不允許輸出多餘的空格。

樣例輸入和輸出那裡貼不了多個case(提交的程式會強行測試sample),所以直接放這裡吧

input:

// case 1

3 30 1

0 22 1

// case 2

4 50 1

0 20 3

2 11 2

output:

// case 1

yes0 2 1

// case 2

no 2

3 30 10 22 1

yes0 2 1

#include

#include

#include

#include

using namespace std;

const int maxv = 1010;

vectorg[maxv], toporder;    // 鄰接表、拓撲序列

int n, m, indegree[maxv] = ;    // 點數、邊數、入度

//拓撲排序

int topologicalsort()

}while(!q.empty())

}g[u].clear();   //清空頂點u的所有出邊(如無必要可不寫)

num++;              //加入拓撲序列的頂點數加1

}return num;

}int main()

int num = topologicalsort();    // 拓撲排序

if(num == n)

} else

return 0;

}

B 萬事如意

給你乙個數 n,請問是否 n 是否滿足 x 2020 y 2021 n.例如 4041 1 2020 1 2021.4042 0 2020 2 2021.input 第一行為 t,表示測試用例數量。1 t 10000 隨後 t 行每行乙個整數 n。1 n 1000000 output 對於每乙個 n...

問題 B 花園

題目描述 小n經常去小t家的花園裡散步,小t家的花園有n個長的 樣的亭 和m條道路連線著亭 但是小t的花園太過於亂了,小n作為 個路痴經常進去了之後找不到出來的路,直在環裡面繞圈。於是小n要讓小t把其中的某些路種上向日葵,使得剩下的路不會出現環。因為向日葵不 便種,第i條路長li,需要li個向日葵去...

問題 B 按鈕

時間限制 1 sec 記憶體限制 128 mb 提交狀態 題目描述 對於給出的正整數a,有兩個按鈕,每次點選第1個按鈕可以使得a減少2,每次點選第2個按鈕可以使得a的值增加3.你的目標是使得a變成b,求最少的點選次數,如果無法完成任務輸出 1。輸入多組測試資料。第一行,乙個整數g,表示有g組測試資料...