題意:老闆要給n個員工發工資最低工資是888;
但是工人們是有要求的 如果輸入 a b 表示a的工資要比b的工資高
求出老闆最少準備多少工資
/**1:拓撲排序(資料結構書上有)
用乙個佇列來儲存入度為零的點
開始遍歷這些點 遍歷之後把以這個點開頭的邊刪除比如a到b 遍歷a時把b的度減一
2: 鄰接表儲存(用vector容器來實現鄰接表的儲存較為簡單)
using namespace std;
struct node
;vectoredge[10005];
int du[10005];
int value[10005];
void creatlinjiebiao(int a,int b)///建立鄰接表
bool topsort(int n)///拓撲排序}}
if(count!=n)return false;///如果最後仍有某個點的度不為0那麼即是存在環
return true;
}int main()
int sum=0;
if(topsort(n))
printf("%d\n",sum);
}else
printf("-1\n");
}return 0;
/**
5 41 2
2 33 4
5 35 6
1 22 3
3 44 5
1 5
Reward(拓撲排序)
這一題很好,用到了拓撲排序 從後往前 由於這一題資料比較大所以用vector來儲存!儲存過程中會出現這乙個問題!4 31 2 2 31 4 這樣的乙個問題怎麼解決呢?3 2 1 4 1這個問題4和3是888,2是889,那麼1是多少合適呢?是889 大於4 還是890 大於1 呢?由題意我們知道是8...
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.以此...