zoukankan      html  css  js  c++  java
  • 【拓扑排序】确定比赛名次

    HDU P1285 确定比赛名次

    拓扑排序裸题qwq

    注意:入度为一的点删掉之后,它的入度要更新为-1

    这个题刷出了我人生中第一次PE 可还行qaq

    我搜索PE是输出格式与标准输出不符, 结果发现语言选成G++ orz

    想起来《%你抄》 “原来CE,只因选错语言” 可我PE,也是选错语言啊啊啊啊啊QAQ

    代码君qwq

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 const int sz = sz;
     6 int n, m;
     7 int plat[sz][sz], in[sz], ans[sz];
     8 int main() {
     9     while(~scanf("%d%d", &n, &m)) {
    10         memset(plat, 0, sizeof(plat));
    11         memset(in, 0, sizeof(in)); 
    12         int cnt = 0, flag = 0, x, y;
    13         for(int i = 1; i <= m; i++) {
    14             scanf("%d%d", &x, &y);
    15             if(!plat[x][y]) {
    16                 plat[x][y] = 1;
    17                 in[y]++;
    18             }
    19         }
    20         while(cnt < n) {
    21             for(int i = 1; i <= n; i++) {
    22                 if(in[i]==0) {
    23                     in[i] = -1;
    24                     ans[++cnt] = i;
    25                     flag = i;
    26                     break;
    27                 }
    28             }
    29             for(int i = 1; i <= n; i++) {
    30                 if(plat[flag][i]) in[i]--;
    31             }
    32         }
    33         for(int i = 1; i < n; i++) 
    34             printf("%d ", ans[i]);
    35         printf("%d
    ", ans[n]);
    36     }
    37     return 0;
    38 }

     这是我写的邻接表存图的拓扑排序,自认为没有错误但交上去就ce

    原因如下:(我很懵逼qaq

    HDU你是魔鬼吗???

     1 #include<queue>
     2 #include<cstdio>
     3 #include<iostream>
     4 using namespace std;
     5 const int sz = 505;
     6 struct edge {
     7     int nxt, to;
     8 }e[sz<<1];
     9 priority_queue<int, vector<int>, greater<int> >q;
    10 int n, m, x, y, num = 0, cnt = 0, in[sz], ans[sz], head[sz];
    11 void add(int from, int to) {
    12     in[to]++;
    13     e[++num].nxt = head[from];
    14     e[num].to = to;
    15     head[from] = num;
    16 }
    17 int main() {
    18     while(~scanf("%d%d", &n, &m)) {
    19         for(int i = 1; i <= m; i++) {
    20             scanf("%d%d", &x, &y);
    21             add(x, y);
    22         }
    23         for(int i = 1; i <= n; i++) {
    24             if(!in[i]) q.push(i);
    25         }
    26         while(!q.empty()) {
    27             int u = q.top();
    28             q.pop();
    29             ans[++cnt] = u;
    30             for(int i = head[u]; i; i = e[i].nxt) {
    31                 int v = e[i].to;
    32                 in[v]--;
    33                 if(!in[v]) q.push(v);
    34             }
    35         }
    36         for(int i = 1; i < n; i++) 
    37             printf("%d ", ans[i]);
    38         printf("%d
    ", ans[n]);
    39     }
    40     return 0;
    41 }

    在看拓扑排序qaq实在是找不到用邻接表存图且不用指针的(美妙)代码了

    难受香菇(想吃香菇馅的水饺啦啦啦啦)

    总之岁月漫长,然而值得期待。
  • 相关阅读:
    第十四周学习进度
    第十三周学习进度
    第十二周学习进度条
    从用户体验角度评价所使用的输入法。
    个人博客十
    数组测试 --Junit
    看了build to win之后的感想
    思考题
    数组中最大子数组之和
    使用Espresso进行UI测试
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9789618.html
Copyright © 2011-2022 走看看