NOIP 加工零件 題解

2022-07-14 09:57:11 字數 3108 閱讀 4664

加工零件凱凱的工廠正在有條不紊地生產一種神奇的零件,神奇的零件的生產過程自然也很神奇。工廠裡有 nn 位工人,工人們從 1 \sim n1∼n 編號。某些工人之間存在雙向的零件傳送帶。保證每兩名工人之間最多隻存在一條傳送帶。

如果 xx 號工人想生產乙個被加工到第 l (l \gt 1)l(l>1) 階段的零件,則所有與 xx 號工人有傳送帶直接相連的工人,都需要生產乙個被加工到第 l - 1l−1 階段的零件(但 xx 號工人自己無需生產第 l - 1l−1 階段的零件)。

如果 xx 號工人想生產乙個被加工到第 1 階段的零件,則所有與 xx 號工人有傳送帶直接相連的工人,都需要為 xx 號工人提供乙個原材料。

軒軒是 1 號工人。現在給出 qq 張工單,第 ii 張工單表示編號為 a_ia**i 的工人想生產乙個第 l_il**i 階段的零件。軒軒想知道對於每張工單,他是否需要給別人提供原材料。他知道聰明的你一定可以幫他計算出來!

第一行三個正整數 nn,mm 和 qq,分別表示工人的數目、傳送帶的數目和工單的數目。

接下來 mm 行,每行兩個正整數 uu 和 vv,表示編號為 uu 和 vv 的工人之間存在一條零件傳輸帶。保證 u \neq vu\=v。

接下來 qq 行,每行兩個正整數 aa 和 ll,表示編號為 aa 的工人想生產乙個第 ll 階段的零件。

共 qq 行,每行乙個字串yes或者no。如果按照第 ii 張工單生產,需要編號為 1 的軒軒提供原材料,則在第 ii 行輸出yes;否則在第 ii 行輸出no。注意輸出不含引號。

輸入 #1複製

3 2 6

1 22 3

1 12 1

3 11 2

2 23 2

輸出 #1複製

no

yesno

yesno

yes

輸入 #2複製

5 5 5

1 22 3

3 44 5

1 51 1

1 21 3

1 41 5

輸出 #2複製

no

yesno

yesyes

【輸入輸出樣例 1 說明】

編號為 1 的工人想生產第 1 階段的零件,需要編號為 2 的工人提供原材料。

編號為 2 的工人想生產第 1 階段的零件,需要編號為 1 和 3 的工人提供原材料。

編號為 3 的工人想生產第 1 階段的零件,需要編號為 2 的工人提供原材料。

編號為 1 的工人想生產第 2 階段的零件,需要編號為 2 的工人生產第 1 階段的零 件,需要編號為 1 和 3 的工人提供原材料。

編號為 2 的工人想生產第 2 階段的零件,需要編號為 1 和 3 的工人生產第 1 階段的零件,他/她們都需要編號為 2 的工人提供原材料。

編號為 3 的工人想生產第 2 階段的零件,需要編號為 2 的工人生產第 1 階段的零件,需要編號為 1 和 3 的工人提供原材料。

【輸入輸出樣例 2 說明】

編號為 1 的工人想生產第 1 階段的零件,需要編號為 2 和 5 的工人提供原材料。

編號為 1 的工人想生產第 2 階段的零件,需要編號為 2 和 5 的工人生產第 1 階段的零件,需要編號為 1,3,41,3,4 的工人提供原材料。

編號為 1 的工人想生產第 3 階段的零件,需要編號為 2 和 5 的工人生產第 2 階段的零件,需要編號為 1,3,41,3,4 的工人生產第 1 階段的零件,需要編號為 2,3,4,52,3,4,5 的工人提供原材料。

編號為 1 的工人想生產第 4 階段的零件,需要編號為 2 和 5 的工人生產第 3 階段的零件,需要編號為 1,3,41,3,4 的工人生產第 2 階段的零件,需要編號為 2,3,4,52,3,4,5 的工人生產第 1 階段的零件,需要全部工人提供原材料。

編號為 1 的工人想生產第 5 階段的零件,需要編號為 2 和 5 的工人生產第 4 階段的零件,需要編號為 1,3,41,3,4 的工人生產第 3 階段的零件,需要編號為 2,3,4,52,3,4,5 的工人生產第 2 階段的零件,需要全部工人生產第 1 階段的零件,需要全部工人提供原材料。

我們可以知道,無向圖中如果有a點到b點距離為l的情況,就可以通過來回通過一條無向邊構造出距離為l + 2,l + 4 ,..., l + n(n為偶數) 的方案。因此本題可換一種思路,即詢問是否存在一種方案,線路長度和l的奇偶性相同的同時l大於等於此距離。轉化為最短路問題。

運動dp中的狀態機模型,我們可以把乙個點分離成奇點和偶點,一條邊分離成兩條邊,即1號點的偶點連線2號點的奇點,1號點的奇點連線2號店的偶點,最後bfs一遍求最短路即可。

最後不要忘記特判一下1號點是孤立結點的情況。

ac**實現

#include #include #include #include using namespace std;

typedef pairpii;

const int n = 100010;

int h[n], e[n * 2], ne[n * 2], idx;

int dist[n][2];

int n, m, query;

pii q[n * 2];

void add(int a, int b)

void bfs()

; dist[1][0] = 0;

while (hh <= tt);}

}}}int main()

bfs();

while (query -- )

return 0;

}

零件加工 貪心 題解

時間限制 1 sec 記憶體限制 128 mb 提交 24 解決 7 提交 狀態 討論版 命題人 外部匯入 題目描述 工匠小k最近有n個零件需要加工。每個零件都需要ti天的時間來完成,每個零件每延遲一天加工都要繳納一定的罰金si。延遲的天數為從今天算起到該工作開始的那天,第乙個零件加工沒有罰金。現在...

零件加工(貪心)

時間限制 1 sec 記憶體限制 128 mb 題目描述 工匠小k最近有n個零件需要加工。每個零件都需要ti天的時間來完成,每個零件每延遲一天加工都要繳納一定的罰金si。延遲的天數為從今天算起到該工作開始的那天,第乙個零件加工沒有罰金。現在小k想知道怎樣安排加工順序可以使他要交的罰金最少,最少是多少...

加工零件 execution

題面 有 n 個零件需要加工。零件之間有 m 個限制,x y 表示 x 要在 y 之前先加工完。每個零件的加工時間都是 1。現在有無限個多個工具機,在滿足限制條件的情況下,零件可以同時加工。求加工完所有零件最少需要多少時間,然後還要求出在時間最少的前提下,最少需要多少工具機。資料保證有解。對於 10...