RE求调
查看原帖
RE求调
608187
Hikario楼主2024/8/13 14:16
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
const int N=200020;
int n;
int len[N];
vector<int>pre[N];
int e[N],ne[N],h[N],idx;
int rd[N],cd[N];
inline void add(int a,int b)
{
    rd[b]++,cd[a]++;
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
inline void dfs(int u,int fa)
{
    for(int i=0;i<len[u];i++)
        dfs(pre[u][i],u);
    add(u,fa);
}
queue<int>q,ans;
int main()
{
    memset(h,-1,sizeof h);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&len[i]);
        for(int j=1,x;j<=len[i];j++)
            scanf("%d",&x),pre[i].push_back(x);
    }
    for(int i=0;i<len[1];i++)dfs(pre[1][i],1);
    for(int i=1;i<=n;i++)
        if(!rd[i]&&cd[i])q.push(i),ans.push(i);
    while(q.size())
    {
        int u=q.front();
        q.pop();
        for(int i=h[u],j;~i;i=ne[i])
        {
            j=e[i];
            rd[j]--;
            if(!rd[j])q.push(j),ans.push(j);
        }
    }
    while(ans.size()>1)
        printf("%d ",ans.front()),ans.pop();
    putchar('\n');
    return 0;
}

我感觉做法思路应该没问题(?)样例和手搓的小数据都过了,但是提交RE了……

2024/8/13 14:16
加载中...