萌新求助

P1983 [NOIP2013 普及组] 车站分级

xiaolou @ 2019-10-07 18:45:11

萌新好久没求助了,今天又来求助。。。

感觉写的莫得问题,然而莫得分数。。。

各位省队大爷帮着看看呗/kk

#include <bits/stdc++.h>

using namespace std;
int n,m;
int k,x;
struct Node
{
    int v;
    Node *next;
}*h[1005],pool[1000005];
int f[1005];
int vis[1005];
int in[1005];
int cnt=0;
priority_queue <int> q;
void Adde(int u,int v)
{
    Node *p=&pool[++cnt];
    p->v=v;
    p->next=h[u];
    h[u]=p;
}
void Work(int u,int sum)
{
    cout << u << " " << sum <<endl;
    q.push(sum);
    vis[u]=1;
    for(Node *p=h[u];p;p=p->next)
    {
        in[p->v]--;
        if(in[p->v]==0)
        {
            Work(p->v,sum+1);
        }
    }   
}

int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        memset(f,0,sizeof(f));
        scanf("%d",&k);
        scanf("%d",&x);
        int srt=x,end;
        k--;
        while(k--)
        {
            scanf("%d",&x);
            f[x]=1; 
        } 
        end=x;
        for(int i=srt+1;i<end;++i)
        {
            if(f[i]==0)
            {
                Adde(i,srt);
                Adde(i,end);
                in[srt]++;
                in[end]++;
            }
        }
    }
    for(int i=1;i<=n;++i)
    {
        if(vis[i]==0&&in[i]==0)
        {
            Work(i,1);
        }
    }
    printf("%d",q.top());
    return 0;
} 

by ousuimei_68 @ 2019-10-07 19:02:17

膜神娄钰


by xiaolou @ 2019-10-07 19:05:30

@ousuimei_68 ???别奶我啊,康一下呗


by ousuimei_68 @ 2019-10-07 19:27:26

@xiaolou

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
int n,m,ans,tot;
int a[1050],t,dep[1050],in[1050],p[1050],map[1050][1050];
struct link
{
    int v;
    link *next;
}edge[3000050],*head[3000050];
void sorting()
{
    queue <int> q;
    for (int i=1;i<=n;i++)
        if (in[i]==0)
        {
            q.push(i);
            dep[i]=1;
        }
    while(q.empty()==false)
    {
        int ber=q.front();
        q.pop();
        for (link *p=head[ber];p;p=p->next)
        {
            int berr=p->v;
            dep[berr]=dep[ber]+1;
            ans=max(dep[berr],ans);
            in[berr]--;
            if (in[berr]==0)
                q.push(berr);
        }
    }
}
void add(int u,int v)
{
    edge[++tot].v=v;
    edge[tot].next=head[u];
    head[u]=&edge[tot];
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        memset(a,0,sizeof(a));
        memset(p,0,sizeof(p));
        scanf("%d",&t);
        for (int j=1;j<=t;j++)
        {
            scanf("%d",&a[j]);
            p[a[j]]++;
        }
        for (int j=a[1]+1;j<=a[t];j++)
        {
            if (p[j]==0)
            {
                for (int k=1;k<=t;k++)
                {
                    int g=a[k];
                    if (map[j][g]==0)
                    {
                        in[g]++;
                        add(j,g);
                        map[j][g]++;
                    }
                }
            }
        }
    }
    sorting();
    printf("%d\n",ans);
    return 0;
}

送你份代码康康


|