zoukankan      html  css  js  c++  java
  • [hdu1285]确定比赛名次(拓扑排序)

    题意:在一幅竞赛图中排序,要求同名次按字典序排序。

    解题关键:拓扑排序模板题

    1、邻接表建图

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<cmath>
     7 #include<vector>
     8 #include<queue>
     9 using namespace std;
    10 typedef long long ll;
    11 const int N=510;
    12 vector<int>g[N];
    13 int deg[N],seq[N];
    14 int n,m,u,v,tol;
    15 priority_queue<int,vector<int>,greater<int> >q;//因为是按字典序的,要注意重边的情况
    16 void toposort(){
    17     for(int i=1;i<=n;i++)if(!deg[i])q.push(i);
    18     tol=0;
    19     while(q.size()){
    20         int u=q.top();
    21         q.pop();
    22         seq[tol++]=u;
    23         for(int i=0;i<g[u].size();i++){
    24             int v=g[u][i];
    25             deg[v]--;
    26             if(!deg[v])q.push(v);
    27         }
    28     }
    29 }
    30 
    31 int main(){
    32     while(scanf("%d%d",&n,&m)!=EOF){
    33         memset(deg,0,sizeof deg);
    34         for(int i=1;i<=n;i++)g[i].clear();
    35         for(int i=1;i<=m;i++){
    36             scanf("%d%d",&u,&v);
    37             g[u].push_back(v);
    38             deg[v]++;
    39         }
    40         toposort();
    41         for(int i=0;i<tol;i++)printf("%d%c",seq[i],i==tol-1?'
    ':' ');
    42     }
    43     return 0;
    44 }

     2、链式前向星建图

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<cmath>
     7 #include<vector>
     8 #include<queue>
     9 using namespace std;
    10 typedef long long ll;
    11 const int N=510;
    12 priority_queue<int,vector<int>,greater<int> >q;//因为是按字典序的,要注意重边的情况
    13 int deg[N],seq[N];
    14 int n,m,u,v,tol;
    15 struct Edge{
    16     int nxt;
    17     int to;
    18     int w;
    19 }e[N];
    20 int head[N],cnt;
    21 void add_edge(int u,int v){
    22     e[cnt].to=v;
    23     e[cnt].nxt=head[u];
    24     head[u]=cnt++;
    25 }
    26 void toposort(){
    27     for(int i=1;i<=n;i++)if(!deg[i])q.push(i);
    28     tol=0;
    29     while(q.size()){
    30         int u=q.top();
    31         q.pop();
    32         seq[tol++]=u;
    33         for(int i=head[u];i!=-1;i=e[i].nxt){
    34             int v=e[i].to;
    35             deg[v]--;
    36             if(!deg[v]) q.push(v);
    37         }
    38     }
    39 }
    40 
    41 int main(){
    42     while(scanf("%d%d",&n,&m)!=EOF){
    43         memset(deg,0,sizeof deg);
    44         memset(head, -1, sizeof head);
    45         cnt=0;
    46         for(int i=1;i<=m;i++){
    47             scanf("%d%d",&u,&v);
    48             add_edge(u,v);
    49             deg[v]++;
    50         }
    51         toposort();
    52         for(int i=0;i<tol;i++)printf("%d%c",seq[i],i==tol-1?'
    ':' ');
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    Java跨语言调用,使用JNA访问Java外部接口
    Docker下搭建Jenkins构建环境
    Elasticsearch方案选型必须了解的10件事!
    Elasticsearch Top10 监控指标
    Elasticsearch删除操作详解
    Elasticsearch索引生命周期管理探索
    论Elasticsearch数据建模的重要性
    Elasticsearch的ETL利器——Ingest节点
    Elasticsearch基础但非常有用的功能之二:模板
    Elasticsearch基础但非常有用的功能之一:别名
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7653647.html
Copyright © 2011-2022 走看看