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()); 를 해줬는데도 안된다,,,,,