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实在是找不到用邻接表存图且不用指针的(美妙)代码了

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

    总之岁月漫长,然而值得期待。
  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9789618.html
Copyright © 2011-2022 走看看