[Softeer] Lv.3 출퇴근길(오답)

Blue·2024년 1월 12일
0

https://softeer.ai/practice/6248

A-B 까지 갈수있을때 방문하는 모든 node 와 B-A로 갈수있을때 방문하는 모든 node 중 두번의 방문이 된다면 +=1 해주는 문제이다,,,

일단 N이 10만이다,, 그래서 A-B로 갈수있는 경로중 방문하는 모든 node 를 찾으려하면 DFS 로 모든 node 로 방문을 Check 해줘야겠다는게 내 생각이였다.,
근데 N이 큰만큼 DFS 로 돌리게 된다면 시간초과가 날것(visited 처리 때문),,
그래서 옛날에 회밀턴 회로 문제를 풀떄 해당 부분에서 check 가 되어있으면 재귀를 이어나가지 않고 그냥 바로 return 하는 문제를 풀었었다.

그렇게 접근을 하고 풀었는데 왜 자꾸 오류가 나는지 모르겠다,,,
풀게되면 다시 수정하겠다,,,,,,,

#include <iostream>
#include <vector>

using namespace std;

int N,M;
vector<int> v[100004];
int sX,sE;

int DFS_recur(int *visited,int start,int end) {
    
//    cout << start << " " << end << "\n";
    if(start==end) {
        visited[start]=1;
        return visited[start];
    }
    
    if(visited[start]) {
        return visited[start];
    }
    visited[start]=1;
    for(int i=0;i<v[start].size();i++) {
        if(visited[v[start][i]]==0) {
            visited[start]=DFS_recur(visited,v[start][i], end);
        }
    }
    return visited[start];
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    cin >> N >> M;
    for(int i=0;i<M;i++) {
        int start,end;
        cin >> start >> end;
        v[start].push_back({end});
    }
    cin >> sX >> sE;
    
    int visitedA[100004];
    DFS_recur(visitedA,sX, sE);
    visitedA[sX]=0;visitedA[sE]=0;
    
    int visitedB[100004];
    DFS_recur(visitedB,sE,sX);
    visitedB[sX]=0;visitedB[sE]=0;
    
    int answer=0;
    for(int i=1;i<=N;i++) {
//        cout << visitedA[i] << " ";
        if(visitedA[i] and visitedB[i]) {
            answer+=1;
        }
    }
//    cout << "\n";
//    
//    for(int i=1;i<=N;i++) {
//        cout << visitedB[i] << " ";
//    }
//    cout << "\n";
    cout << answer << "\n";
    
    return 0;
}

// DFS 재귀 부분에서 Max(,,,DFS()); 를 해줬는데도 안된다,,,,,

profile
할수있다가 아닌 해야한다!!

0개의 댓글