zoukankan      html  css  js  c++  java
  • codevs 3294 车站分级

    2013NOIP普及组压轴题。

    其实只要想到这个车子没停的站肯定比停的站级别低,拓扑排序,在节点入队时dis[e[i].v]=dis[head]+1维护最长路即可。

    但要注意此题含有大量重边,若不判重可能会tle掉。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #define maxv 1005
    #define maxe 500005
    using namespace std;
    int n,m,g[maxv],dis[maxv],num1,num2=0,regis1[maxv],regis2[maxv];
    bool vis[maxv][maxv];
    int nume=0,inq[maxv];
    struct edge
    {
    int v,nxt;
    }e[maxe];
    void addedge(int uu,int vv)
    {
    e[++nume].v=vv;
    e[nume].nxt=g[uu];
    g[uu]=nume;
    }
    void topu()
    {
    queue <int> q;
    for (int i=1;i<=n;i++)
    {
    if (inq[i]==0)
    {
    q.push(i);
    dis[i]=1;
    }
    }
    while (!q.empty())
    {
    int head=q.front();
    q.pop();
    for (int i=g[head];i;i=e[i].nxt)
    {
    inq[e[i].v]--;
    if (inq[e[i].v]==0)
    {
    q.push(e[i].v);
    dis[e[i].v]=dis[head]+1;
    }
    }
    }
    }
    int main()
    {
    memset(vis,false,sizeof(vis));
    memset(inq,0,sizeof(inq));
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
    scanf("%d",&num1);
    for (int j=1;j<=num1;j++)
    {
    scanf("%d",&regis1[j]);
    if (j!=1)
    {
    for (int k=regis1[j-1]+1;k<=regis1[j]-1;k++)
    regis2[++num2]=k;
    }
    }
    for (int j=1;j<=num1;j++)
    for (int k=1;k<=num2;k++)
    {
    if (vis[regis1[j]][regis2[k]]==false)
    {
    vis[regis1[j]][regis2[k]]=true;
    addedge(regis1[j],regis2[k]);
    inq[regis2[k]]++;
    }
    }
    num2=0;
    }
    topu();
    sort(dis+1,dis+n+1);
    printf("%d ",dis[n]);
    return 0;
    }

  • 相关阅读:
    jquery使用ajax
    Docker下使用centos无法使用systemctl怎么办
    memcache安装及解决无法远程连接的问题
    NetCore控制台程序-使用HostService和HttpClient实现简单的定时爬虫
    PHP代码审计01
    路由和交换-
    路由和交换-VLAN
    路由和交换-FTP配置
    51job招聘信息爬虫
    豆瓣电影排行250爬虫
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5061612.html
Copyright © 2011-2022 走看看