• 【HAOI2016】食物链


    【HAOI2016】食物链

    题意

    找出一个符合生物学定理的有向图中的所有不同的链的个数。

    解法

    暴力记忆化搜索就行了。注意只有一个点的链不算食物链。

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <cctype>
    #include <vector>
    #define INF 2139062143
    #define MAX 0x7ffffffffffffff
    #define del(a,b) memset(a,b,sizeof(a))
    using namespace std;
    typedef long long ll;
    template<typename T>
    inline void read(T&x)
    {
        x=0;T k=1;char c=getchar();
        while(!isdigit(c)){if(c=='-')k=-1;c=getchar();}
        while(isdigit(c)){x=x*10+c-'0';c=getchar();}x*=k;
    }
    const int maxn=100000+5;
    vector<int> G[maxn];
    int _in[maxn],_out[maxn];
    int dp[maxn];
    
    int dfs(int cur,int fa) {
    	if(dp[cur]) return dp[cur];
    	if(!_out[cur]) return dp[cur]=1;
    	for(int i=0;i<G[cur].size();i++) {
    		int v=G[cur][i];
    		if(v==fa) continue;
    		dp[cur]+=dfs(v,cur);
    	}
    	return dp[cur];
    }
    int n,m;
    int main()
    {
    	read(n),read(m);
    	for(int i=1;i<=m;i++) {
    		int u,v;
    		read(u),read(v);
    		_out[u]++,_in[v]++;
    		G[u].push_back(v);
    	}
    	int ans=0;
    	for(int i=1;i<=n;i++) if(!_in[i]&&_out[i]) ans+=dfs(i,0);
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    php判断值是否为空
    MyQQ
    java动态定义二维数组问题
    回归CSDN
    字体工具栏
    传说中的服务器
    sql server 2000 出现不能执行查询,因为一些文件丢失或未注册
    chm文件打不开
    Cmd不能运行,窗口闪一下就消失
    isql病毒
  • 原文地址:https://www.cnblogs.com/mrasd/p/9550088.html
Copyright © 2020-2023  润新知