• 【拓扑排序】确定比赛名次


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

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

    总之岁月漫长,然而值得期待。
  • 相关阅读:
    python之爬虫(九)PyQuery库的使用
    python之爬虫(八)BeautifulSoup库的使用
    Python之爬虫(七)正则的基本使用
    DropZone(文件上传插件)
    Django之自带分页模块Pagination
    Django之重写用户模型
    python--员工信息管理系统编译及思路
    python--生成器进阶
    python--迭代器与生成器
    python--简易员工信息系统编写
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9789618.html
Copyright © 2020-2023  润新知