• 【NOIP2013】【Luogu1983】车站分级(建图,拓扑排序)


    problem

    • 给定n个车站(依次编号从1到n,并且有一个优先级),m趟车次(每次停靠的站点)
    • 满足每一趟车次中,如果停靠了x,那么这一趟车次中所有优先级>=x的都要停。(始发站和终点站自然也要停另说)
    • 求最少有多少个优先级。

    solution

    • 因为所有>=x的都要停,所以没停的都是优先级小于x的,即一趟车次中没停的站点的优先级要小于这趟车次的每一个停靠站。(因为这一趟车次停靠站之间的相对大小不知道,不能拿那个算。)
    • 于是就可以得到车站之间的大小关系。从小的(所有没停的)向大的(所有停了的)都连一条边。拓扑排序统计有几层(开pair加一而不是节点遇到入度0的原因是入度相同的节点可能不唯一,他们可以是一个层级的,就会有重复统计的问题)。

    codes

    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<cstring>
    using namespace std;
    const int maxn = 1010;
    int ting[maxn], vis[maxn];
    vector<int>G[maxn]; int in[maxn]; int book[maxn][maxn];
    int main(){
        int n, m;  cin>>n>>m;
        for(int i = 1; i <= m; i++){
            memset(vis,0,sizeof(vis));
            int x;  cin>>x;
            for(int j = 1; j <= x; j++){ cin>>ting[j]; vis[ting[j]]=1;}
            for(int j = ting[1]; j <= ting[x]; j++){//按照顺序的,开始站到终点站之间的每一个站
                if(vis[j])continue;//枚举没停的
                for(int k = 1; k <= x; k++)//枚举停了的
                    {//连一条边
                        if(book[j][ting[k]])continue;//判重优化时间
                        else book[j][ting[k]] = 1;
                        G[j].push_back(ting[k]); in[ting[k]]++; 
                    }
            }
        }
        int ans = 1;
        //topusort
        queue<pair<int, int> >q;
        for(int i = 1; i <= n; i++)if(in[i]==0)q.push(make_pair(i,1));//入度为0
        while(q.size()){
            int u = q.front().first, v = q.front().second;  q.pop();
            for(int i = 0; i < G[u].size(); i++)
                if(--in[G[u][i]] == 0){q.push(make_pair(G[u][i],v+1));ans = max(ans,v+1);}
        }
        cout<<ans<<'
    ';
        return 0;
    }
  • 相关阅读:
    Redis-安装
    Redis-介绍
    Redis 教程(转)
    C# Redis 帮助类
    sublime text3---Emmet:HTML/CSS代码快速编写神器
    Sublime Text3 Package Control和Emmet插件安装方法
    vs2010音频文件压缩 调用lame_enc.dll将WAV格式转换成MP3
    vs学习过程中遇见的各种问题
    vs2010中添加dll文件
    解决angular11打包报错Type 'Event' is missing the following properties from type 'any[]': ...Type 'Event' is not assignable to type 'string'
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444622.html
Copyright © 2020-2023  润新知