/* 食物链 拓扑图DP */ #include <cmath> #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; const int A = 1e7+10; const int B = 1e6+10; const int mod = 1e9 + 7; const int inf = 0x3f3f3f3f; inline int read() { char c = getchar(); int x = 0, f = 1; for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1; for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48); return x * f; } struct node{int v,nxt;} e[B]; int rd[B],cd[B],n,m,f[B],cnt,head[B]; void modify(int u,int v) { e[++cnt].nxt=head[u]; e[cnt].v=v; head[u]=cnt; } queue<int>q; int main() { int x,y; n=read(),m=read(); for (int i=1;i<=m;i++) { x=read(),y=read(); modify(x,y); rd[y]++, cd[x]++; } for (int i=1;i<=n;i++) if (!rd[i]) { if (cd[i]) f[i]=1; q.push(i); } while (!q.empty()) { //cout<<1<<endl; int u=q.front(); q.pop(); for (int i=head[u];i;i=e[i].nxt) { int v=e[i].v; f[v]+=f[u]; rd[v]--; if (!rd[v]) q.push(v); } } int ans=0; for (int i=1;i<=n;i++) if (!cd[i]) ans+=f[i]; printf("%d",ans); }
P3183 [HAOI2016]食物链
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
server 2016证书服务安装
证书服务安装
服务器 重启 -
食物链
食物链
i++ ios 并查集 -
食物链计数
题目描述 给你一个食物网,你要求出这个食物网中所有 的结果。样例输入7
c++ i++ #include ci -
洛谷 P2024 食物链
并查集补集
#include #define 输入输出 -
Luogu P3182 [HAOI2016]放棋子
错排,组合计数,数学,高精度
高精度 错位排序 组合数学 i++ #include -
食物链 POJ - 1182
点击打开链接通俗易懂的博客 获益匪浅 点击打开链接个人理解详见注释
POJ 并查集 #include 取模 种类并查集 -
【POJ】[1182]食物链
也是因为OJ问题卡主了几天的一个题 复制一...
并查集 i++ c代码 #include NYOJ -
java避免代码同步执行
Android 并发 通俗的解释:一次做两件事。优点: 提高资源利用率:当一个任务没有完全占用系统资源,可以利用并发来提供资源利用率,同时也能更快的完成任务。 程序更精简: 提高效率,逻辑有清晰 &
java避免代码同步执行 java 并发编程 JVM Java