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 }
  • 相关阅读:
    uva10912 Simple Minded Hashing(DP)
    uva10401 Injured Queen Problem(DP)
    uva702 The Vindictive Coach(DP)
    忍者X4将采取自动开通vip,论坛充值淘宝自助购买均可。步骤如下
    C盘不够大,可以这样操作
    任务思维1
    PHP 获取指定日期的星期方法如下
    学学C#开发client,server,C/S架构的程序
    今天的主角就是protobuf-net
    关于忍者站群X4-小飞镖服务器配置帮助汇总。
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7653647.html
Copyright © 2011-2022 走看看