加工零件凱凱的工廠正在有條不紊地生產一種神奇的零件,神奇的零件的生產過程自然也很神奇。工廠裡有 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...