这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞
题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路
从入读为零的点进行记忆化搜索,搜到出度为零的点返回1
所有返回值加起来就是答案。
“注意单独的一种孤立生物不算一条食物链。”出题人都这么好心的说了,然而第一次交的时候还是忘了= =结果成为此题第一个WA的人hh
#include<stdio.h> #include<string.h> #include<algorithm> #define maxn 100010 using namespace std; struct node{ int from,to,next; }e[maxn*]; int head[maxn],vis[maxn],dp[maxn],ind[maxn],out[maxn]; int tot,n,m,u,v; void insert(int u, int v){ e[++tot].from=u; e[tot].to=v; e[tot].next=head[u]; head[u]=tot; } int dfs(int x){ if (vis[x]) return dp[x]; vis[x]=; ){ dp[x]=; ; } ; ; i=e[i].next){ int v=e[i].to; sum+=dfs(v); } dp[x]=sum; return sum; } int main(){ scanf("%d%d", &n, &m); memset(ind,,sizeof(ind)); memset(,sizeof(out)); memset(head,-,sizeof(head)); tot=-; ; i<=m; i++){ scanf("%d%d", &u, &v); out[u]++; ind[v]++; insert(u,v); } ; memset(vis,,sizeof(vis)); memset(dp,,sizeof(dp)); ; i<=n; i++) && ) ans+=dfs(i); printf("%d\n", ans); ; }