题目链接

解题思路

简单的DAG上DP即可。

参考程序

#include <bits/stdc++.h>
using namespace std; const int Maxn = 100010;
const int Maxm = 200010;
struct edge {
int To, Next;
};
edge Edge[ Maxm ];
int Start[ Maxn ], Used;
int n, m, In[ Maxn ], Out[ Maxn ], Dp[ Maxn ], L, R, Queue[ Maxn ], Count[ Maxn ]; inline void AddEdge( int x, int y ) {
Edge[ ++Used ] = ( edge ) { y, Start[ x ] };
Start[ x ] = Used;
return;
} int main() {
scanf( "%d%d", &n, &m );
for( int i = 1; i <= m; ++i ) {
int x, y; scanf( "%d%d", &x, &y );
AddEdge( x, y );
++In[ y ]; ++Out[ x ];
}
for( int i = 1; i <= n; ++i )
if( !In[ i ] ) {
Dp[ i ] = 1;
Queue[ ++R ] = i;
}
memcpy( Count, In, sizeof( Count ) );
while( L < R ) {
int u = Queue[ ++L ];
for( int t = Start[ u ]; t; t = Edge[ t ].Next ) {
int v = Edge[ t ].To;
Dp[ v ] += Dp[ u ];
if( --In[ v ] == 0 ) Queue[ ++R ] = v;
}
}
int Ans = 0;
for( int i = 1; i <= n; ++i )
if( Count[ i ] && !Out[ i ] ) Ans += Dp[ i ];
printf( "%d\n", Ans );
return 0;
}

「HAOI2016」食物链的更多相关文章

  1. 「HAOI2016」字符合并

    「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你 ...

  2. 【LOJ】#2064. 「HAOI2016」找相同字符

    题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...

  3. 【LOJ】#2063. 「HAOI2016」字符合并

    题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是\(n^3 2^8\)了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚 ...

  4. 【LOJ】#2062. 「HAOI2016」地图

    题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...

  5. 【LOJ】#2061. 「HAOI2016」放棋子

    题解 水题,可惜要写高精度有点烦 一看障碍物的摆放方式和最后的答案没有关系,于是干脆不读了,直接二项式反演可以得到 设\(g_k\)为一种摆放方式恰好占了k个障碍物 \(f_k = \sum_{i = ...

  6. 「HAOI2016」放棋子

    题目链接 戳这 前置知识 错位排序 Solution 我们可以观察发现,每一行的障碍位置对答案并没有影响. 于是我们可以将此时的矩阵化成如下形式: \[ 1\ \ 0\ \ 0\ \ 0\\ 0\ \ ...

  7. loj2063 「HAOI2016」字符合并

    ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  8. loj2061 「HAOI2016」放棋子

    答案就是错排数 n = int(input()) f = [0] * 205 f[0] = 1 for i in range(2, n+1): f[i] = (i-1) * (f[i-1] + f[i ...

  9. 「NOI2001」食物链

    传送门 Luogu 解题思路 带权并查集我不会啊 考虑种类并查集(扩展域并查集的一种). 开三倍空间,一倍维护本身,二倍维护猎物,三倍维护天敌,然后用并查集搞一搞就好了. 细节注意事项 咕咕咕 参考代 ...

随机推荐

  1. [BZOJ 3117] [NOI1999]内存分配(STL)

    [BZOJ 3117] [NOI1999]内存分配(STL) 题面 内存是计算机重要的资源之一,程序运行的过程中必须对内存进行分配. 经典的内存分配过程是这样进行的: 1.内存以内存单元为基本单位,每 ...

  2. C++练习 | 模板与泛式编程练习(2)

    #include <iostream> #include <cmath> #include <cstring> #include <string> #i ...

  3. mongodb 数据操作(2)

    查询 db.student.find({}) 查询db.student.find({name:"李强1"}) 查询   条件查询 db.student.find({sex:&quo ...

  4. 9.用ExecuteSqlCommand执行存储过程

    比如你有一个存储过程 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CreateAutho ...

  5. 关于redis的几件小事(三)redis的数据类型与使用场景

    1.string 这是最基本的类型了,就是普通的set和get,做简单的kv缓存. 2.hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对 ...

  6. 02 前端之css

    ---恢复内容开始--- 1.css的几种引入方式: 1.行内样式 (行内式是在标记的style属性中设定的css样式.不推荐大规模使用) <p style="color: red&q ...

  7. Exited too quickly (process log may have details)-配置问题

    在配置supervisor的时候,提示Exited too quickly (process log may have details),这个时候一脸懵逼,啥回事,执行太快了???

  8. Delphi BitBtn组件

  9. 基于DIGI WR21的PLC数据采集

    通过路由器,使用python脚本读取数据,转发到后台golang数据采集平台,数据采集平台通过数据清洗,然后把数据清洗成标准数据,通过gRpc传输到分析平台.后期会写一点golang 基于grpc的微 ...

  10. deep_learning_Function_LSTM_dynamic_rnn

    一. tf.nn.dynamic_rnn的输出 tf.nn.dynamic_rnn的输入参数如下 tf.nn.dynamic_rnn(    cell,    inputs,    sequence_ ...