题目
https://pintia.cn/problem-sets/994805046380707840/problems/1336215880692482060
就是找从一个点到另一个点有几条路可以走
思路
dfs+记忆化搜索,递归
代码
#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
#include <queue>
#include <map>
#define MAXX 505
using namespace std;
int n,m,f;
int cnt[MAXX];
vector<int> v[505];
int dfs(int x)
{
if (cnt[x]!= -1)
return cnt[x];
int ans = 0;
for (int i = 0; i < v[x].size(); ++i)
{
if (cnt[v[x][i]] == -1)
dfs(v[x][i]);
ans += cnt[v[x][i]];
}
if (ans == 0)
f=1;
return cnt[x] = ans;
}
int main()
{
cin>>n>>m;
int x,y;
while (m--)
{
cin>>x>>y;
v[x].push_back(y);
}
memset(cnt,-1,sizeof cnt);
cin>>x>>y;
cnt[y] = 1;
cout<<dfs(x)<<' ';
if (f==1)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
return 0;
}