拓樸排序:
(1)將入度為0的點入棧
(2)while(!stack.empty())
node=stack.top();
for(each currentnode與node有邊)
indegree[currentnode]--(入度減一)
//poj1949在這裡儲存currentnode完成的時間,當然是貪心記錄最遲完成的時間
if(currentnode的入度為0)
stack.push(currentnode);
}
#include #include #include #include #include using namespace std;
const int maxn=10010;
int finishtime[maxn];
int indegree[maxn];
int outdegree[maxn];
int sumtime[maxn];
int main()
}printf("%d\n",ans);
}return 0;
}
POJ 1949 最小優先佇列
題意是有n行任務,給出完成每項任務所需要的時間長度,求出完成所有任務所需要的最短時間.每個任務都會有乙個約束條件,就是在完成這項任務之前必須完成所列出的其它任務.可以同時做多項任務.簡單來說就像煮飯炒菜問題一樣,可以一邊燒飯一邊炒菜.但炒菜之前必先洗菜.這道題我主要用了最小優先佇列,有點像dijkt...
POJ 1949(DAG最長路徑)
題目 所有任務合起來構成乙個dag,因為任務可以並行,所以從無前驅的節點到無後繼的節點的所有任務路徑中,最耗時的那一條就是所需要的總時間,因為這樣的搜尋中已經考慮了乙個任務所有可能的開始時間。include include include using namespace std int n,c 10...
POJ 1094 拓撲排序
文章大意是將n個字母排序 n 26 最終必須排成鍊錶式的輸出 一旦確定或者出現環,記錄當前步數,後續輸入無視 加個拓撲排序判斷圖的總結 1 如果輸入的有向圖中的點,不存在入度為0的點,則存在迴路,反過來則不成立 2 如果入隊的點的個數小於輸入的點的個數,則肯定存在迴路 3 如果存在的入度為零的點大於...