拓撲排序 kahn演算法及dfs的拓撲排序

2021-08-19 20:17:08 字數 1270 閱讀 3369

有個人的家族很大,輩分關係很混亂,請你幫整理一下這種關係。給出每個人的孩子的資訊。輸出乙個序列,使得每個人的後輩都比那個人後列出

sample input

5 0

4 5 1 0

1 0

5 3 0

3 0樣例輸出 sample output

2 4 5 3 1

【因為需輸出字典序最小的因而要使用優先佇列】

#include

#include

#include

using

namespace

std;

vector

g[110];

int r[110];

int n;

int main()

}priority_queue,greater > pq;

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

while (!pq.empty())

}return

0;}

題目大意,輸入員工a,b要求a比b工資要高【至少高1】,

每人至少100元,求使得總獎金最少的方案

樣例輸入 sample input

2 1

1 2樣例輸出 sample output

201

dfs拓撲很水orz

#include

#include

using

namespace

std;

int n,m;

const

int maxn=50010;

vector

g[maxn];

int f[maxn];

int book[maxn];

bool dfs(int u)

else f[u]=max(f[u],f[v]+1);

}book[u]=1;

return

true;

}int main()

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

f[i]=100;

bool flag=true;

int ans=0;

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

}ans+=f[i]; //累加

}if (flag) cout

cout

<<"poor xed";

return

0;}

拓撲排序 Kahn演算法

該演算法的關鍵在於需要維護乙個入度為0的頂點的集合 每次從該集合中取出 如果要求輸出時編號小的在前,可以用優先佇列儲存集合 乙個頂點,將該頂點放入儲存結果的 list中。緊接著迴圈遍歷由該頂點引出的所有邊,從圖中移除這條邊,同時獲取該邊的另外乙個頂點,如果該頂點的入度在減去本條邊之後為0,那麼也將這...

Kahn演算法拓撲排序

1.概念及規則 規則 圖中每個頂點只出現一次。a在b前面,則不存在b在a前面的路徑。否則就會形成環 頂點的順序是 保證所有指向它的下個節點在被指節點前面 2.演算法及實現 kahn演算法 include using namespace std csont int maxn 10005 struct ...

HDU 1258 拓撲排序Kahn演算法

問題概述 有n個比賽隊,編號為從1到n,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在 裁 判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2 用p1 p2表示 這種,排名時p1在 必 須在p2之前,現在請你程式設計序確定排名 答案不止一種,按照隊伍從小到大排列...