10分求调

P1983 [NOIP2013 普及组] 车站分级

wyc14 @ 2024-10-06 19:59:23

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int n, m, s, top, ans, tt[MAXN], st[MAXN], de[MAXN], str[MAXN], tuopu[MAXN][MAXN];
bool bo[MAXN], is[MAXN];
int main()
{
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= m; i++)
    {
        memset(is, 0, sizeof(is));
        scanf("%d", &s);
        for(int j = 1; j <= s; j++)
        {
            scanf("%d", &st[j]);
            is[st[j]] = 1;
        }
        for(int j = str[1]; j <= st[s]; j++)
        {
            if(!is[j])
            {
                for(int k = 1; k <= s; k++)
                {
                    if(!tuopu[j][st[k]])
                    {
                        tuopu[j][st[k]] = 1;
                        de[st[k]]++;
                    }
                }
            }
        }
    }
    do
    {
        top = 0;
        for(int i = 1; i <= n; i++)
        {
            if(de[i] == 0 && !bo[i])
            {
                tt[++top] = i;
                bo[i] = 1;
            }
        }
        for(int i = 1; i <= top; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(tuopu[tt[i]][j])
                {
                    tuopu[tt[i]][j] = 0;
                    de[j]--;
                }
            }
        }
        ans++;
    }while(top);
    printf("%d", ans - 1);
    return 0;
}

by wyc14 @ 2024-10-06 20:00:59

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int n, m, s, top, ans, tt[MAXN], st[MAXN], de[MAXN], str[MAXN], tuopu[MAXN][MAXN];
bool bo[MAXN], is[MAXN];
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        memset(is, 0, sizeof(is));
        cin >> s;
        for(int j = 1; j <= s; j++)
        {
            cin >> st[j];
            is[st[j]] = 1;
        }
        for(int j = str[1]; j <= st[s]; j++)
        {
            if(!is[j])
            {
                for(int k = 1; k <= s; k++)
                {
                    if(!tuopu[j][st[k]])
                    {
                        tuopu[j][st[k]] = 1;
                        de[st[k]]++;
                    }
                }
            }
        }
        do
        {
            top = 0;
            for(int i = 1; i <= n; i++)
            {
                if(de[i] == 0 && !bo[i])
                {
                    tt[++top] = i;
                    bo[i] = 1;
                }
            }
            for(int i = 1; i <= top; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(tuopu[tt[i]][j])
                    {
                        tuopu[tt[i]][j] = 0;
                        de[j]--;
                    }
                }
            }
            ans++;
        }while(top);
    }

    cout << ans - 1;
    return 0;
}

|