年功序列c

2022-01-11 18:47:39 字數 2872 閱讀 1288

在虛擬國度裡多了很多 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 這些人,他觀測到了一些有趣的現象 虛擬國度裡有一些凳子...

2023年10月28日提高組 C 友誼序列

n 兩個長度為n nn的序列a aa和b bb,詢問有多少個元素x xx,滿足x a ixor bjx a i xor b j x ai x orbj 且 x a x in a x a或x b x in b x b 只需回答元素的個數是奇數還是偶數 資料範圍 n 2 105 n leq 2 time...

C語言基本功教程系列 1

看了那麼多文章,感覺到大家學習遊戲程式設計的熱情.經常看到很多人提出關於opengl directx,和computer graphics的問題.但是我個人人為,遊戲程式設計,最最最重要的還是c c 語言的基本功.如何編寫高效率,整潔,和盡可能少的bug的 是成為乙個遊戲程式設計員的關鍵.所以我開拉...