HDU2647 Reward 拓撲排序

2022-04-06 11:56:52 字數 716 閱讀 7415

題目鏈結。

分析:我使用結構的是邊表。

1.因為只有滿足偏序關係才能應用拓撲排序(即u>v要改成v<=u),所以在建立臨邊時要注意。

2.在拓撲排序過程中,如果發現環,那麼結果便是no。

3.至於每個點的具體值,我用了乙個一維陣列vis來輔助標記。

ac**如下:

#include #include 

#define maxn 10010

#define maxm 20010

struct

nodenode[maxm];

inthead[maxn], top, n, m, indegree[maxn], ans[maxn], vis[maxn];

void

init()

}void add(int u, int

v)int

toposort()

}if(j>n) return0;

ans[i] = 888+vis[j];

for(k=head[j]; k != -1; k =node[k].next)

}return1;

}int

main()

sum = 0

;

if(toposort())

else printf("

-1\n");

}return0;

}

HDU 2647 Reward(拓撲排序)

click here 題意 老闆給員工發薪水,有的員工要求必須比某些員工薪水高。基礎薪水是888,問最少發多少薪水。解題思路 想要發的薪水最少,就要讓員工盡量只滿足要求即可,不必多發。我們可以大致想象出員工的薪水大概是一層一層分布的,即888一層,889一層,依此類推,每層有若干個員工,但一定不會為...

hdu 2647 Reward ( 拓撲排序 )

統計各結點出度,出度為0的點表示他們 a類 所需的reward為888,而reward要比他們多的 b類 則為888 1,reward要比b類多的 c類 則為888 2.其中若一開始從a類得到了b類,然後有某個b類要比另乙個b類的reward多,則該b類的reward從888 1改為888 2.以此...

hdu2647 Reward(拓撲排序)

老闆要給很多員工發獎金,但是部分員工有個虛偽心態,認為自己的獎金必須比某些人高才心理平衡 但是老闆很人道,想滿足所有人的要求,並且很吝嗇,想畫的錢最少 輸入若干個關係 a ba c c b意味著a 的工資必須比b的工資高 同時a 的工資比c高 c的工資比b高 當出現環的時候輸出 1 思路 反向建圖,...