zoukankan      html  css  js  c++  java
  • 【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;
    }
    
  • 相关阅读:
    c# 基础算法(一) 九九乘法
    万能模糊查询SQL
    C#通过连接ODBC的方式调用存储过程
    《从设计到模式》学习笔记part1
    C#知识归纳
    Python之路
    Tomcat优化
    Zabbix 3.0 + Nginx + Mariadb
    Spark DataFrame ETL教程
    Python连接presto
  • 原文地址:https://www.cnblogs.com/mrasd/p/9550088.html
Copyright © 2011-2022 走看看