「HAOI2016」食物链
解题思路
简单的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」食物链的更多相关文章
- 「HAOI2016」字符合并
「HAOI2016」字符合并 题意: 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你 ...
- 【LOJ】#2064. 「HAOI2016」找相同字符
题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...
- 【LOJ】#2063. 「HAOI2016」字符合并
题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是\(n^3 2^8\)了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚 ...
- 【LOJ】#2062. 「HAOI2016」地图
题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...
- 【LOJ】#2061. 「HAOI2016」放棋子
题解 水题,可惜要写高精度有点烦 一看障碍物的摆放方式和最后的答案没有关系,于是干脆不读了,直接二项式反演可以得到 设\(g_k\)为一种摆放方式恰好占了k个障碍物 \(f_k = \sum_{i = ...
- 「HAOI2016」放棋子
题目链接 戳这 前置知识 错位排序 Solution 我们可以观察发现,每一行的障碍位置对答案并没有影响. 于是我们可以将此时的矩阵化成如下形式: \[ 1\ \ 0\ \ 0\ \ 0\\ 0\ \ ...
- loj2063 「HAOI2016」字符合并
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- 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 ...
- 「NOI2001」食物链
传送门 Luogu 解题思路 带权并查集我不会啊 考虑种类并查集(扩展域并查集的一种). 开三倍空间,一倍维护本身,二倍维护猎物,三倍维护天敌,然后用并查集搞一搞就好了. 细节注意事项 咕咕咕 参考代 ...
随机推荐
- SSM @Autowired注入失败
1, Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案 https://blog.csdn.net/weixin_30945319/article/details/9 ...
- Codeforces 1221C. Perfect Team
传送门 考虑如何保证限制,首先团队数最大就是 $min(c,m)$ 但是还不够,每个团队还要 $3$ 个人,所以还要和 $(c+m+x)/3$ 再取 $min$ 这样就满足所有限制了 #include ...
- LinkedList实现基于LRU算法的缓存
LinkedList实现基于LRU算法的缓存 2015年08月07日 18:18:45 秦江波 阅读数 2068 文章标签: java算法linkedlist缓存LRU更多 分类专栏: Java ...
- 94. Binary Tree Inorder Traversal (Java)
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- @Validated @RequestBody @RequestParam配合使用校验参数
1. @Validated @RequestBody 配合使用 两者搭配进行参数的校验,要想自己捕获该异常,需要自定义全局异常处理器 2. @Validated @RequestParam 配合使 ...
- Delphi Form组件
- kubeadm安装k8s1.13
1.环境介绍: centos 7.4.1708 关闭selinux和iptable,环境很重要! 主机 ip地址 cpu核数 内存 swap host解析 k8s-master 10.0.0.11 2 ...
- HQL实现模糊查询
hibernate 实现模糊查询两种传参方式,其实各个方法的实质都是一样的,只不过传递参数的方法稍微有点区别 public List<User> getUsers(String id){ ...
- mysql总结1
修改表名:alter table table_name rename new_table_name; 添加字段:alter table table_name add column_name type_ ...
- PAT Basic 1011 A+B 和 C (15 分)
给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行,顺序给出 ...