vijos拓撲編號(逆向拓撲排序 優先佇列)

2022-06-08 18:57:06 字數 867 閱讀 3620

描述h國有n個城市,城市與城市之間有m條單向道路,滿足任何城市不能通過某條路徑回到自己。

現在國王想給城市重新編號,令第i個城市的新的編號為a[i],滿足所有城市的新的編號都互不相同,並且編號為[1,n]之間的整數。國王認為乙個編號方案是優美的當且僅當對於任意的兩個城市i,j,如果i能夠到達j,那麼a[i]應當優美的編號方案有很多種,國王希望使1號城市的編號盡可能小,在此前提下,使得2號城市的編號盡可能小...依此類推

輸入第一行讀入n,m,表示n個城市,m條有向路徑。

接下來讀入m行,每行兩個整數:x,y

表示第x個城市到第y個城市有一條有向路徑。

輸出輸出一行:n個整數

第i個整數表示第i個城市的新編號a[i],輸出應保證是乙個關於1到n的排列。

解決:逆向拓撲排序+貪心就可以了

ac**:

#includeusing

namespace

std;

const

int n=1e5+10

;const

int m=2e5+10

;struct

stedge[m];

inthead[n],cnt,n,m;

int r[n]=;

inta[n];

void addedge(int u,int

v)void

bfs()

int ans=n;

while(!q.empty())}}

}int

main()

bfs();

for(int i=1;i<=n;i++) cout<"";

return0;

}

寫於2020/8/19 21:20

POJ 3687 逆向拓撲排序

題意 n個球,m個關係,a b 代表 a 比 b 輕,按編號1 n輸出每個球是第幾大,要使得編號小的球排名盡量小.例如 5 6 1 4 3 2 1號球可以是第3,4,5,6重 這裡要選第三重,那麼二號球就只能是最重的乙個了,即6.輸出答案為 3 6 5 4 1 2 思路 反向建立拓撲排序,則以重的球...

POJ 3687 逆向拓撲排序

以小球為模型,實際上就是找滿足條件的最小字典序 比如 我們有這樣一組資料 1 4 24 1 3 2意思就是1組測試樣例,4代表乙個序列,1,2,3,4 我們要做的就是調整下次序,使它滿足兩個條件。處於4號位的數字要比處於1號位的數字要小,處於3號位的數字要比處在2號位的數字小。我們隨便一想,就有兩組...

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...