BSU 토폴로지 정렬 + dfs의 CF770C 온라인 과정

BSU 토폴로지 정렬 + dfs의 CF770C 온라인 과정

제목 링크 : https://codeforces.com/contest/770/problem/C

주제의 주된 아이디어 : 총 N 개의 과목이 있고 그 중 M 개의 주요 과목이 있습니다 .M 개의 주요 과목을 통과하면 해당 주인공이 졸업 할 수 있습니다. 즉 목표가 달성됩니다.
이제 i 번째 코스를 통과하기 위해 먼저 통과해야하는 과목 목록이 있습니다. 이제 주인공은 과목 통과 명령을 받아 결국 최소한의 과목을 통과하여 주인공을 졸업 할 수 있기를 바랍니다.
출력 : 최소한 수강 한 과정 수 + 수강 한 과정 순서, 그렇지 않은 경우 (링이 있음) 출력 -1

샘플
입력 :
6 2
5 3
0
0
0
2 2
1 4
1 5

출력 :
5
12 34 5

아이디어 :
먼저 1 차원 벡터 -ma를 사용하여 학습해야하는 주 과정을 표시 한 다음 2 차원 벡터 –v를 사용하여 이미지를 저장합니다. 구체적인 방법은 먼저 주 과정, 즉 dfs (ma [i])를 검색 한 다음 앞으로 나아가는 것입니다. 결과 배열 (vis [i] == 2)에 저장된 노드를 발견하면 메인 코스의 전제 조건을 검색하고, 결과가 아닌 중복 노드 (vis [i] == 1)를 발견하면 반환합니다. 그런 다음 출력 -1 (링이 있고 성공할 수 없음), 그렇지 않으면 노드가 결과 배열에 배치됩니다.

참고 : exit (0) ------ 프로그램을 직접 종료 할 수 있습니다.

#include<iostream>
#include<cstdio>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdlib>
#include<map>
using namespace std;
#define scan(n) scanf("%d",&n)
#define ll long long
const int maxn=1e5+5;
vector<int> ma,v[maxn],r;
int n,k,m,a;
int vis[maxn];
int cnt,ff;
void dfs(int x)
{
    
    
    if(vis[x]==2)
        return;
    vis[x]=1;
    for(int i=0;i<v[x].size();i++)
    {
    
    
        int to=v[x][i];
        if(vis[to]==1)
        {
    
    
            cout<<-1<<endl;
            exit(0);
        }
        dfs(to);
    }
    vis[x]=2;
    r.push_back(x);
}

int main()
{
    
    
    scanf("%d%d",&n,&k);
    memset(vis,0,sizeof(vis));
    for(int i=0;i<k;i++)
    {
    
    
        scanf("%d",&a);
        ma.push_back(a);
    }
    for(int i=1;i<=n;i++)
    {
    
    
        scanf("%d",&m);
        for(int j=0;j<m;j++)
        {
    
    
            scanf("%d",&a);
            v[i].push_back(a);
        }
    }
    for(int i=0;i<ma.size();i++)
    {
    
    
        dfs(ma[i]);
    }
    int l=r.size();
    cout<<l<<endl;
    for(int i=0;i<l-1;i++)
        cout<<r[i]<<' ';
    cout<<r[l-1]<<endl;
    return 0;
}

추천

출처blog.csdn.net/qq_40534166/article/details/98784054