NOIP 模拟 $17\; \rm 世界线$
题解 \(by\;zj\varphi\)
此题经简单观察可发现,一个点的贡献就是这个点所能到的点减去它的出度
那么我们就可以暴力搜索,但是显然会超时,所以我们可以使用一个黑科技 \(\rm bitset\),这个东西可以整体位运算
我们设 \(bit_{i,j}\) 表示 \(i\) 能到 \(j\),转移时直接 \(bit_{i}|=bit_{v}\)
但是这样会爆空间,正解是分块,以时间来换取空间,但这样有些麻烦,我们发现,当一个点被访问次数已经等于它的入度了,这个点就没用了
所以我们直接将没用的 \(\rm bitset\) 回收即可,最后别忘了处理根。
Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef long long ll;
static const int N=6e4+1,M=1e5+7;
unsigned first[N],vis[N],out[N],st[N],be[N],in[N],tot,tp,n;
int m,t=1;
ll ans;
bitset<N> bit[N];
struct edge{unsigned v,nxt;}e[M];
inline void add(unsigned u,unsigned v) {e[t].v=v,e[t].nxt=first[u],first[u]=t++;}
inline int New() {return tp?st[tp--]:tot++;}
inline void Throw(int x) {
ans+=bit[be[x]].count()-1-out[x];
bit[st[p(tp)]=be[x]].reset();
}
void dfs(int x) {
vis[x]=1;
if (!be[x]) be[x]=New();
bit[be[x]][x]=1;
for (ri i(first[x]),v;i;i=e[i].nxt) {
--in[v=e[i].v];
if (vis[v]) {
bit[be[x]]|=bit[be[v]];
if (!in[v]) Throw(v);
continue;
} else dfs(v);
bit[be[x]]|=bit[be[v]];
if (!in[v]) Throw(v);
}
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
read(n),read(m);
for (ri i(1),u,v;i<=m;p(i)) read(u),read(v),add(u,v),p(out[u]),p(in[v]);
for (ri i(1);i<=n;p(i)) {
if (!vis[i]) {
dfs(i);
if (!in[i]) Throw(i);
}
}
printf("%lld\n",ans);
return 0;
}
}
int main() {return nanfeng::main();}
NOIP 模拟 $17\; \rm 世界线$的更多相关文章
- NOIP 模拟 $17\; \rm 时间机器$
题解 \(by\;zj\varphi\) 一道贪心的题目 我们先将节点和电阻按左边界排序,相同的按右边界排序 对于每一个节点,我们发现,选取左边界小于等于它的电阻中右边界大于它且最接近的它的一定是最优 ...
- NOIP 模拟 $17\; \rm weight$
题解 \(by\;zj\varphi\) 一道树剖的题 先对于原图求出一棵最小生成树,求出来的这棵树中的边定为树边,其它边叫非树边 那么对于一条非树边,它要成为最小生成树上的边,权值只能为连接它两个端 ...
- NOIP模拟17.9.22
NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥
- NOIP模拟17.9.21
NOIP模拟17.9.21 3 58 145 201 161.5 样例输出21.6 数据规模及约定对于40% 的数据,N <= 20对于60% 的数据,N <= 1000对于100% 的数 ...
- NOIP模拟 17.8.20
NOIP模拟17.8.20 A.阶乘[题目描述]亲爱的xyx同学正在研究数学与阶乘的关系,但是他喜欢颓废,于是他就制作了一个和阶乘有关系的数学游戏:给出两个整数 n,m,令 t = !n,每轮游戏的流 ...
- NOIP模拟 17.8.18
NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也 ...
- NOIP模拟 17.8.15
NOIP模拟17.8.15 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...
- NOIP模拟 17.8.17
NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 ...
- NOIP模拟 17.8.16
NOIP模拟17.8.16 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...
随机推荐
- CG-CTF WxyVM
一. 之前一直以为虚拟机是那种vmp的强壳,下午看了一些文章才逐渐明白虚拟机这个概念,目前ctf中题目出现的都是在程序中相等于内嵌了一个虚拟机,将程序代码转换成自己定义的指令,通过内嵌的虚拟机进行解释 ...
- Vue3 + Cesium + Typescript 集成搭建的快速启动模板(包含示例数据)
开门见山 项目地址:https://github.com/tanghaojie/vue3-cesium-typescript-start-up-template 好用的话给个star呗,有更新可以第一 ...
- Docker 基础备忘录
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...
- 【Mysql】InnoDB 引擎中的页目录
一.页目录和槽 接上一篇,现在知道记录在页中按照主键大小顺序串成了单链表. 那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找 ...
- 使用mvn命令将pom和jar上传至nexus私服
要将自定义的jar或者pom上传至nexus私服,需要配置maven的settings文件! 上传至nexus私服配置 1. settings配置 <!-- maven设置私服对应的信息:id. ...
- P3312 数表
P3312 数表 题意 求出 \[\sum_{i=1}^n\sum_{j=1}^m\sigma(\gcd(i,j))[\sigma(\gcd(i,j))\le a] \] 其中 \(\sigma\) ...
- P2476-记忆化搜索
链接 DP? 我们看看,这个状态似乎有亿点点多. 我们看看数据范围,数量不超过5,颜色数不超过15. 15维DP显然不靠谱. 那么我们就思考一下--个数? 记忆化搜索可ac: #include< ...
- SSM和Maven整合
项目架构如图 applicationContext.xml还有其他文件一起放进resources下 jsp,js,等文件放在webapp下
- 使用Pycharm创建Django项目无法创建app.
Python3.7使用Django1.11.7创建Django项目报以下错误时: 在使用Pycharm创建Django项目报以下错误时: Traceback (most recent call las ...
- odoo里的开发案例
1.模块命名[驼峰命名方法] res开头的是:resources 常见模型:res.users, res.company, res.partner, res.config.setti ...