知识框架
No.0 筑基
请先学习下知识点,道友!
题目知识点大部分来源于此:题目例题大部分来源于此:
No.1 拓扑排序
题目来源:Acwing-164. 可达性统计
题目描述:
题目思路:
下面这个是超时的,dfs超时的,应该用拓扑排序的
题目代码:
#include <bits/stdc++.h>
using namespace std;
#define N 100010
#define inf 0x3f3f3f3f
#define debug(x) cout<<#x<<" = "<<x<<endl;
#define LL long long
const int mod = 1e9+7;
int n,m,k,d,g;
int x,y,z;
string str;
char ch;
vector<int>v[N];
LL dp[N]={0};
int vis[N];
void dfs(int index,int &num){
if(dp[index]!=0){
num=num+dp[index];
return;
}
vis[index]=1;
num++;
for(int i=0;i<v[index].size();i++){
if(vis[v[index][i]]==0){
dfs(v[index][i],num);
}
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y;
v[x].push_back(y);
}
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
int num=0;
dfs(i,num);
dp[i]=num;
cout<<num<<endl;
}
return 0;
}