POJ 3687 逆向拓撲排序

2021-07-30 23:44:36 字數 833 閱讀 3459

題意: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

思路:反向建立拓撲排序, 則以重的球入度為0開始, 用優先佇列每次彈出入度為零編號最大的球即可

#define inf 0x3f3f3f3f

#define maxn 204

#define pair pair#define mem(a, b) memset(a, b, sizeof(a))

using namespace std;

int t;

int n, m;

vectorg[maxn];

int ans[maxn];

int in[maxn];

int he[maxn];

int topsort()

while ( !que.empty() ) }}

if (sum < n) return 0;

return 1;

}int main()

mem(ans, 0);

cin >> n >>m;

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

int flag = topsort();

if(flag)

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

else

cout << endl;

}return 0;

}

POJ 3687 逆向拓撲排序

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

poj 3687 拓撲排序

hiahiahia我又回來了!傳送 題意 理解題意很重要嗯 給定幾個標籤球的重量大小關係,求每個球是第幾重的 即每個球在所有球的重量中由小到大排名是多少 也可以認為是重量嘛,就是第1號位置的球重4一類的。如果存在多種可行解,就按編號小得重量盡量小輸出 重點 思路 拓撲。但是 逆序的!why?因為正序...

poj 3687 反向拓撲尋求字典序最小解

看題意可得,這道題很明顯是反向拓撲排序求解的問題,只不過反向拓撲排序求的是標籤的順序,之後還有把每個標籤所對應的質量聯絡起來就好。include include include include include includeusing namespace std const int maxn 210...