模板:
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 1005; //最大邊數
int n; //點數
vector
edge[maxn]; //鄰接表
queue
q; //維護乙個入度為0的集合
int indegree[maxn]; //記錄每個頂點的入度
void init()
void addedge(int from, int to)
bool topological_sort()
}if(cnt < n)
return
false; //有迴路
else
return
true;
}int main()
if(!topological_sort())
cout
<< "-1"
<< endl;
return0;}
/*65 25 0
4 04 1
2 33 1
*/
hdu2647題意:
有n個人,m個關係,a,b代表a應得的工資比b多,最低工資888,,要讓所有人滿意,求老闆最少給多少工資。不可能完成輸出-1。
/*
by : zhangfy
*/#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 20005; //最大邊數
int n; //點數
vector
edge[maxn]; //鄰接表
queue
q; //維護乙個入度為0的集合
int indegree[maxn]; //記錄每個頂點的入度
int reward[maxn]; //記錄每個點應得的錢
void init()
void addedge(int from, int to)
void topological_sort()
}if(cnt == n)
else
cout
<< "-1"
<< endl;
}int main()
topological_sort();
}return
0;}
HDU 2647拓撲排序
還有乙個地方需要注意 判斷輸出 1的情況不能只判斷沒有乙個入度為0的點,因為有可能在中間就出現矛盾了,如 a b c d c 有入度為0的點,但卻要輸出 1 include include include includeusing namespace std define max 10005 int...
hdu 2647 拓撲排序
題意 就是後面的人必須比前面的人領的前多1,每個人至少888,問要總共要多少錢。思路 裸的的拓撲排序,因為是佇列,層數是一層一層遞進的,所以當那個點度數為0時,必然是最後消失的前驅的v 1,這時的v 1顯然最大。include using namespace std define mod 10000...
hdu 2647 拓撲排序)
思路 就是乙個簡單的拓撲排序,給每個節點標號,不過要注意的是訪問過的節點的id應該取最大才能滿足要求,然後就是要反向建邊 這裡wa了好多次 1 include2 include3 include4 include5 include6 include7 using namespace std 8 de...