dfs+记忆化40分求调
查看原帖
dfs+记忆化40分求调
1139661
ylzxbcyy楼主2024/1/27 19:41
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
const int N=5005;
vector<int> chin[N];
int rot[N]={0};
int root;
long long cnt=0;
long long track[N]={0};
//cnt++;
void dfs(int x)
{if(track[x])return;
    if(chin[x].empty()){track[x]++;
        return;}
    int t=chin[x].size();
    while(t--)
    {
        dfs(chin[x][t]);
        track[x]+=track[chin[x][t]];
    }
}


int main()
{int z,y;
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>z>>y;
        chin[y].push_back(z);
        rot[z]=1;
    }
    for(int i=1;i<=n;i++)
    {
        if(rot[i]==0){root=i;dfs(root);cnt+=track[root];}
    }
    
    cout<<cnt%80112002;
}

2024/1/27 19:41
加载中...