題意:工人發工資,每個個人都有要求,比某人多,問滿足搜有人要求的最小總工資數。
思路:逆拓撲排序
之前都是誰大誰是頭節點,但是這題如果誰大誰為頭的話,那麼頭結點的工資將不停的改變,有點麻煩,但是根節點工資永遠不會變,所以可以反過來,誰小誰當根節點,也就是出度變入度,入度變出度,剩下和拓撲一樣,只不過在求個和
#include#include#include#include#includeusing namespace std;
int num[10005];
int reward[10005];
vectorv[10005];
int c_sum = 0;
bool find(int a,int b)
return false;
}void topsort(int n)
while(!q.empty())}}
if(c_sum > 0 )
printf("-1\n");
else
printf("%d\n",sum);
}int main()
for(i = 0; i < m; i++)
}topsort(n);
}return 0;
}
Reward HDU 2647(拓撲排序)
傳送門 qaq 題意 給你n個人,m個關係,關係是指乙個人的獎勵比乙個人高,然後讓你求最少的獎勵金額。思路 如果存在環的話,就不可能,所以就是簡單的乙個拓撲排序。include include include include include include include includeusing ...
康拓展開 康拓逆展開
康拓展開 已知有一集合a包含n個不同的元素,其中 k1,k2,k3.kn 2 是a的乙個排列。假設此排列為a按字典序從小到大排列的排列中的第x個排列,則x a1 n 1 a2 n 2 an 2 1 an 1 0 其中ai為ki 1.kn中比ki小的數的個數 例如 3214是1234的第2 3 1 2...
康托展開及康拓逆展開
康拓展開 把乙個整數x展開成如下形式 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 其中a i 為 當前元素 在 所有未出現的元素 中排在第i個 從0開始 並且0 a i 為了更好的理解康托展開,舉個例子 序列3 4 6 2 1 7 5 8 0 總共有9個數 第乙個...