社区讨论

求助各位大佬

学术版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi7xp2h3
此快照首次捕获于
2025/11/21 05:19
4 个月前
此快照最后确认于
2025/11/21 05:19
4 个月前
查看原帖
洛谷P1983,代码玄学过不了样例,大佬看一下
CPP
//洛谷P1983
#include<bits/stdc++.h>
using namespace std;
int a[1001],rd[1001],ind[1001],que[100001];
bool used[1001];
vector<int> s[1001];
int dp[1001];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        memset(used,false,sizeof(used));
        int S;
        cin>>S;
        for(int i=1;i<=S;i++)
        {
            scanf("%d",&a[i]);
            used[a[i]]=true;
        }
        for(int i=1;i<=S;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(!used[j])
                {
                    s[i].push_back(j);
                }
            }
        }
        for(int i=1;i<=n;i++)
            if(!used[i])
                ind[i]++;
    }
    for(int i=1;i<=n;i++)
    {
        cout<<ind[i]<<" ";
    }
    puts("");
    //图已经建好,拓扑排序
    int head=0,tail=0;
    for(int i=1;i<=n;i++)
    {
        if(!ind[i])
            que[tail++]=i;
    }
    while(head<tail)
    {
        int t;
        t=que[head];
        head++;
        ind[t]--;
        for(int i=0;i<s[t].size();i++)
        {
            dp[s[t][i]]=max(dp[s[t][i]],dp[t]+1);
            if(!--ind[s[t][i]]) que[tail++]=s[t][i];
        }
    }
    int maxx=0;
    for(int i=1;i<=n;i++)
    {
       cout<<dp[i]<<endl;
    }
    cout<<maxx<< endl;
    return 0;
}
在线等,谢谢

回复

1 条回复,欢迎继续交流。

正在加载回复...