PAT甲1146 Topological Order (25)

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

int N,M,K;
vector<int> G[1010];
int inD[1010]={0},A[1010];

void init()
{
    for(int i=1;i<=N;i++)
    {
        A[i]=inD[i];
    }
}

int main()
{
    scanf("%d%d",&N,&M);
    for(int i=0;i<M;i++)
    {
        int c1,c2;
        scanf("%d%d",&c1,&c2);
        G[c1].push_back(c2);
        inD[c2]++;
    }
    scanf("%d",&K);
    int num=0;
    for(int i=0;i<K;i++)
    {
        init();
        int now;
        bool flag=true;
        for(int j=0;j<N;j++)
        {
            scanf("%d",&now);
            if(A[now]!=0)
            {
                flag=false;
            }
            else
            {
                for(int k=0;k<G[now].size();k++)
                {
                    A[G[now][k]]--;
                }
            }
        }
        if(!flag)
        {
            if(num!=0)printf(" ");
            printf("%d",i);
            num++;
        }
    }
    printf("\n");
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80478546