優先選最小值並不是直接建圖進行拓撲排序,優先選最小值不同於求拓撲排序的最小字典序。
思路:反向建圖,優先選取最大值進行拓撲排序,最後倒序輸出陣列(或者記錄的時候可以倒著記錄,最後正著輸出)
#include using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=1e5+5;
struct edgepe[maxn*10];
int a[maxn],cnt=1,in[maxn],n,m;
int head[maxn],ans=1;
void add(int x,int y)
void tuopu()
}} int main()
cnt=n;
tuopu();
if(cnt!=0)else
} }return 0;
}
BZOJ 4010 菜餚製作
知名美食家小a被邀請至atm 大酒店,為其品評菜餚。atm酒店為小a準備了 n 道菜餚,酒店按照為菜餚預估的質量從高到低給予 1 到 n 的順序編號,預估質量最高的菜餚編號為 1 由於菜餚之間口味搭配的問題,某些菜餚必須在另一些菜餚之前製作,具體的,一共有 m 條形如 i 號菜餚 必須 先於 j 號...
拓撲排序,廣度優先
使用乙個佇列來進行廣度優先搜尋。初始時,所有入度為 0 的節點都被放入佇列中,它們就是可以作為拓撲排序最前面的節點,並且它們之間的相對順序是無關緊要的。在廣度優先搜尋的每一步中,取出隊首的節點 u 在廣度優先搜尋的過程結束後。如果答案中包含了這 n 個節點,那麼就找到了一種拓撲排序,否則說明圖中存在...
拓撲排序 利用優先佇列
include include include include using namespace std const int maxn 505 vector graph maxn inttopnum maxn nodenum maxn intnumvertex,numedge 有向無環圖一定存在拓撲序...