對先遍歷後處理要理解的深刻。
從下往上遍歷通過傳引數改變父節點的值。
利用vector存圖可以大大減少空間和時間的開銷。
演算法一定要靈活的掌握,不能死搬硬套,而且對先遍歷後處理的思想理解的要深刻,還有從下往上遍歷時通過傳參改變父節點值。
利用vector存圖可以大大減少空間和時間的開銷,但是要resize()哦。
題目:
00030:獎學金
檢視 提交 統計 提問
總時間限制: 1000ms 記憶體限制: 128000kb
描述期末考試終於完了,老班決定召開班委會,內容嘛,則是可愛的獎學金的問題((*^__^*)),她叫來了一些班委,每位班委提出了自己的意見:「我認為同學a的獎學金應該比b多!」老班決定要找出一種獎學金方案,滿足各位班委的意見,且同時使得總獎學金數最少。每位同學獎學金最少為100元且都為整數。
【輸入】
第一行兩個整數n,m,表示同學總數和班委意見數n<=10000,m<=20000;
以下m行,每行2個整數a,b,表示某個班委認為第a號同學獎學金應該比第b號同學高。
輸入第一行兩個整數n,m,表示同學總數和班委意見數;
以下m行,每行2個整數a,b,表示某個班委認為第a號同學獎學金應該比第b號同學高。
輸出若無法找到合法方案,則輸出「impossible」(不含引號);否則輸出乙個數表示最少總獎學金。
樣例輸入21
12樣例輸出
201
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
vector
>g;
int visited[10001];
int n,s = 0;
int value[10001];
int indexx;
bool dfs(int child,int parent)
else
//拓撲排序的靈活處理,《更新》父節點的值}}
visited[child] = 1;
s += 100 + value[child];
if(parent != 0 && value[child]+1 > value[parent])
value[parent] = value[child] + 1;//思路要嚴密,更新父節點的值
return
true;
}bool toposort()
return
true;
}int main()
if(toposort())
else
printf("impossible\n");
return
0;}
排序 獎學金
某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...
獎學金 排序
描述 某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定...
python 拓撲排序 Python 拓撲排序
python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...