cdoj 排名表 拓扑排序 排名输出 贪心

//并不理解为什么需要反向建图,由大到小倒序确定排名。感觉正向由小到大和反向由大到小应该是一样的。

解:拓排+贪心,反向建边,先找排名靠后的(now,不知道为什么)

 1 #include<cstdio>

 2 #include<iostream>

 3 #include<cmath>

 4 #include<algorithm>

 5 #include<cstring>

 6 #include<cstdlib>

 7 #include<queue>

 8 #include<vector>

 9 #include<map>

10 #include<stack>

11 #include<string>

12 

13 using namespace std;

14 

15 vector <int> G[207];

16 int T,n,m;

17 int a[207],b[207];

18 int d[207];

19 int now;

20 

21 int main(){

22     scanf("%d",&T);

23     for (int cas=0;cas<T;cas++){

24             scanf("%d%d",&n,&m);

25             for (int i=1;i<=n;i++){

26                     G[i].clear();

27                     d[i]=0;

28             }

29             for (int i=0;i<m;i++){

30                     int x,y;

31                     scanf("%d%d",&x,&y);

32                     d[x]++;

33                     G[y].push_back(x);

34             }

35             now=n;

36             for (int i=0;i<n;i++){

37                     for (int j=n;j>=1;j--){

38                             if (d[j]==0){

39                                     d[j]=-1;

40                                     a[now--]=j;

41                                     int sz=G[j].size();

42                                     for (int k=0;k<sz;k++){

43                                             d[G[j][k]]--;

44                                     }

45                                     break;

46                             }

47                     }

48             }

49             if (now!=0){

50                     printf("-1\n");

51                     continue;

52             }

53             for (int i=1;i<=n;i++){

54                     b[a[i]]=i;

55             }

56             for (int i=1;i<=n;i++){

57                     printf("%d%c",b[i],i==n?'\n':' ');

58             }

59     }

60     return 0;

61 }

62 /*

63 1

64 6 5

65 6 1

66 1 5

67 4 5

68 2 4

69 3 4

70 

71 5

72 4 0

73 4 1

74 1 1

75 4 2

76 1 2

77 2 1

78 4 1

79 2 1

80 4 1

81 3 2

82 */
View Code

 

你可能感兴趣的:(排序)