码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷3243

时间:2017-10-30 21:53:39      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:span   blog   拓扑   tac   color   拓扑排序   log   ons   ace   

骚题。嗯,是的。

这题读题面就可以看出是拓扑排序。本来以为是裸题,结果发现要priority_queue处理,然后发现不行。然后懵逼。

其实正解是反向建图日神仙。然后扔在pq里头,然后拓扑序,然后反向输出。注意有Impossible所以不能边处理边输出。

额。。。然后调了TM半个小时。。。

发现自己在处理的时候往ans中重复加了点,一直输出Impossible。。。绝望脸。。。

最后,才发现pq居然没有clear()!没有clear()!没有clear()!竟有如此厚颜无耻之STL!

好吧,上代码,保留调试痕迹。

 1 #include<cstdio>
 2 #include<queue>
 3 #include<stack>
 4 
 5 using namespace std;
 6 
 7 const int SIZE = 100000 + 10;
 8 
 9 vector<int> G[SIZE];
10 priority_queue<int> q;
11 stack<int> ans;
12 
13 int in[SIZE];  //入度
14 
15 int main() {
16     int T;
17     scanf("%d", &T);
18     while(T--) {
19         int n, m;
20         scanf("%d%d", &n, &m);
21         for(int i = 0; i < m; i++) {
22             int f, t;
23             scanf("%d%d", &f, &t);
24             G[t].push_back(f);
25             in[f]++;
26         }
27         for(int i = 1; i <= n; i++){
28             if(!in[i]){
29                 q.push(i);
30 //                printf("push = %d\n", i);
31             }
32         }
33         while(!q.empty()) {
34             int t = q.top();
35             q.pop();
36 //            printf("top = %d\n", t);
37             ans.push(t);
38             for(int i = 0; i < G[t].size(); i++) {
39                 in[G[t][i]]--;
40                 if(!in[G[t][i]]) {
41                     q.push(G[t][i]);
42 //                    printf("push = %d\n", G[t][i]);
43                 }
44             }
45         }
46 //        printf("ans.size() = %d\n", ans.size());        ---->   一切绝望的根源 X)
47         if(ans.size() != n){
48             printf("Impossible!\n");
49             while(!q.empty()){
50                 q.pop();
51             }
52         }else{
53             while(!ans.empty()){
54                 printf("%d ",ans.top());
55                 ans.pop();
56             }
57             printf("\n");
58         }
59         for(int i = 0; i <= n; i++){
60             G[i].clear();
61             in[i] = 0;
62         }
63     }
64     return 0;
65 }

 

洛谷3243

标签:span   blog   拓扑   tac   color   拓扑排序   log   ons   ace   

原文地址:http://www.cnblogs.com/codeiscode/p/7756889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!