在虛擬國度裡多了很多 virtual oier,為了樹立對後輩的威信,從第 11 個 virtual oier 開始的 oier 們搞起了年功序列的制度。
虛擬國度的創始人 oier chtholly 感覺非常有趣,於是他決定觀測 11 到 nn 這些人,他觀測到了一些有趣的現象:虛擬國度裡有一些凳子,如果 aa 是 的先輩則 能在 前面得到凳子
chtholly的觀測可以構成 mm 個序列,每個序列有 kk 個元素 a1,a2,a3,⋅⋅⋅⋅⋅⋅,aka1a 2a3,⋅⋅⋅⋅⋅⋅,a k。表示在 aia 有凳子前 a1,a2,a3,⋅⋅⋅⋅⋅⋅,ai−1a 1a2 ,a 3⋅⋅⋅⋅⋅⋅,a i−1必須有凳子。(ai−1a i−1是 aia的前輩)
例如 k = 3 時:a=1,2,3a=1,2,3,表示 33 有凳子前 1,21,2必須都有凳子,22 有凳子前 11 必須有凳子。
但 chtholly 年紀大了記憶力未必好,如果第 ii 個序列與前 i−1i−1 個序列衝突的話那麼就只需要考慮前 i−1i−1 個序列就好了。(忽略第 ii 個序列)
chtholly 希望知道 11 到 nn 個人的年功序列的最小字典序。
輸入格式
第一行兩個數 n,mn,m
接下來 m 行每行第乙個數為 kk,接下來 kk 個數為這次觀測構成的序列
輸出格式
輸出 nn 個數構成的最小字典序。
樣例樣例輸入
4 33 1 2 3
2 4 2
3 3 4 1
樣例輸出
1 4 2 3
樣例解釋
第三個觀測序列與前兩個觀測序列衝突不考慮,前兩個觀測序列可以構成 11 44 22 33 或者 44 11 22 33 這兩個序列,字典序小的為 11 44 22 33。
資料範圍與提示
3030%的資料,n≤10,m≤4n≤10,m≤4
5050%的資料,n≤10000,m≤5000n≤10000,m≤5000
100100%的資料,n≤100000,m≤50000,k≤nn≤100000,m≤50000,k≤n
首先,如果不考慮有衝突的情況下,那這就是一道模板題了,也就是用優先佇列的拓撲排序,於是,問題便變成如何處理衝突
首先有乙個思路,就是用dfs,乙個乙個地新增序列,如果,拓撲排序滿足的話,就可以直接輸出了,但是,這個思路首先肯定會t,其次,可能不會滿足字典序最小,於是,就又要想其他思路了
好好讀題,會發現
如果第 i個序列與前 i+1個序列衝突的話那麼就只需要考慮前 i個序列就好了。
思考一下,會發現,每乙個序列滿足必須是前乙個序列滿足,所以,如果有乙個序列不滿足,剩餘的就不用輸入了下乙個問題,便成了如何判斷可行
這時,回歸拓撲排序的定義,無環,也就是判斷是否有環
for
(int i =
0; i < g[x]
.size()
; i++
)//鄰接表
vis[g[x]
[i]]=1
;//標記if(
!check
(g[x]
[i])
)//如果下乙個頂點有環,說明,這張圖都有環
vis[g[x]
[i]]=0
;//回溯
}return1;
}
因為判斷要用鄰接表,所以,如果判斷有環,我們要刪去鄰接表,順便,就刪去
入度的tot
for
(int j=
1;j)
**
#include
#include
#include
#include
using
namespace std;
int x, y;
int m;
int n;
int tot[
100005];
vector<
int> g[
100005];
vector<
int> ans;
int vis[
100005];
int k;
int cnt =0;
int a[
100005];
priority_queue<
int, vector<
int>
, greater<
int>
> q;
bool
check
(int x)
vis[g[x]
[i]]=1
;//標記if(
!check
(g[x]
[i])
)//如果下乙個頂點有環,說明,這張圖都有環
vis[g[x]
[i]]=0
;//回溯
}return1;
}int
main()
// 1沒有入度
g[a[j -1]
].push_back
(a[j]);
tot[a[j]]++
;}memset
(vis,0,
sizeof
(vis));
if(!check
(a[1])
)break;}
}for
(int i =
1; i <= n; i++)}
while
(!q.
empty()
)}}for
(int i =
0; i < ans.
size()
; i++
)}
年功序列c
在虛擬國度裡多了很多 virtual oier,為了樹立對後輩的威信,從第 11 個 virtual oier 開始的 oier 們搞起了年功序列的制度。虛擬國度的創始人 oier chtholly 感覺非常有趣,於是他決定觀測 11 到 nn 這些人,他觀測到了一些有趣的現象 虛擬國度裡有一些凳子...
序列遊戲2
實驗任務 有乙個字串序列 s,初始時是空的,定義以下兩種操作 i x 在序列的末尾插入字串 x。q x 輸出在序列 s 中有幾個字串是以 x 為字首的。字串 x 的長度小於 10,只包含小寫字母。資料輸入 輸入第一行是乙個整數m 1 m 100000 表示有m 種操作。接下來m 行,表示 m 種操作...
《Stanley博士的家》遊戲功略
stanley博士的家 遊戲功略 背景 james是乙個私家偵探,某日他收到物理學家stanlley博士的一封信,博士在信中邀請james去他家小聚,並說有要緊事相求。進入博士的家 觀察房子一周後發現所有的門都是鎖著的。在房子一邊的一棵大樹上發現有物品,但是需要用工具才能取下,於是在車庫賓士車旁邊的...