题解 | 食物链计数

食物链计数

https://www.nowcoder.com/practice/9844dd9f531e46e29f5749e8fcc4bd0b

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
#define debug(x) cerr << #x << ": " << x << '\n';
const int INF = 0x3f3f3f3f3f3f3f3f;
//倒序不要忘记是--不是++
void solve(){
    int n,m;cin>>n>>m;
    vector<vector<int>> e(n+1);
    vector<int> deg(n+1),chu(n+1);
    for(int i=1;i<=m;i++){
        int u,v;cin>>u>>v;
        e[u].push_back(v);
        deg[v]++;
        chu[u]++;
    }
    vector<int> dp(n+1);
    auto dfs=[&](auto dfs,int u)->int{
        if(dp[u]) return dp[u]; 
        if(e[u].size()==0){
            return dp[u]=1;
        }
        for(auto i:e[u]){
            dp[u]+=dfs(dfs,i);
        }
        return dp[u];
    };
    int ans=0;
    for(int i=1;i<=n;i++){
        if(!deg[i]&&!chu[i]) continue;
        if(!deg[i]){
            ans=(ans+dfs(dfs,i));
        }
    }
    cout<<ans;
}
signed main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t = 1;
    // cin>>t;
    while(t--){
        solve();
    }return 0;
}

全部评论
主播太强了
点赞 回复 分享
发布于 04-03 00:04 江苏
我喜欢你
点赞 回复 分享
发布于 04-02 23:54 浙江

相关推荐

评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务