博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JZOJ.5328【NOIP2017模拟8.22】世界线
阅读量:7006 次
发布时间:2019-06-27

本文共 1544 字,大约阅读时间需要 5 分钟。

Description

 

Input

Output

 

Sample Input

5 51 21 32 33 44 5

Sample Output

5
 

Data Constraint

 

Hint

样例解释

先拓扑排序,从出度为0的点开始搜,连这个点的前一个点以及之前的点都要和这个点连边,这样算出每个点能到达的其他点再减去已有的边就可以了。

然而需要用bitset优化状态,然而还有可能会爆空间,我们需要分几次搜索.....

1 #include 
2 #include
3 #include
4 #include
5 #define N 1300000 6 using namespace std; 7 bitset<1001>qwq[N]; 8 int du[N/2],n,m,head[N],next[N],to[N],num,q[N/2],t; 9 long long ans;10 void add(int u,int v){11 num++;12 next[num]=head[u];13 to[num]=v;14 head[u]=num;15 }16 int main(){17 freopen("worldline.in","r",stdin);18 freopen("worldline.out","w",stdout);19 scanf("%d%d",&n,&m);20 ans=-m;21 num=0;22 for (int i=1,u=0,v=0;i<=m;i++){23 scanf("%d%d",&u,&v);24 add(u,v);25 du[v]++;26 }27 t=0;28 for (int i=1;i<=n;i++)29 if (!du[i]) q[++t]=i;30 for (int v=0,i=1;i<=t;i++)31 for (int j=head[q[i]];j;j=next[j]){32 v=to[j];33 du[v]--;34 if (!du[v]) q[++t]=v;35 }36 for (int l=1,r=1000;l<=n;l=r+1,r+=1000){37 for (int i=1;i<=n;i++) qwq[i].reset();38 for (int i=t;i>=1;i--){39 for (int j=head[q[i]];j;j=next[j]){40 qwq[q[i]]|=qwq[to[j]];41 }42 ans+=qwq[q[i]].count();43 if ((q[i]>=l)&&q[i]<=r) qwq[q[i]][q[i]-l]=1; 44 }45 }46 printf("%lld\n",ans);47 }
神奇的代码

 

转载于:https://www.cnblogs.com/Lanly/p/7413268.html

你可能感兴趣的文章
MySQL主从同步问题集
查看>>
[置顶] cocos2d-x2.2.5走四棋儿源码“开源”
查看>>
在游戏框架中实现天空体
查看>>
在eclipse远程运行map/reduce例子
查看>>
png图片IE6下实现透明
查看>>
通过SSH远程连接Cisco设备
查看>>
Lisp在科学工作中的运用-1.1 定义各种类
查看>>
Android 4.4代码资源115网盘下载!
查看>>
matlab如何加随机噪声
查看>>
也谈C语言字符串和字符的输入
查看>>
LAMP--1.Mysql 安装
查看>>
TPS及计算方法
查看>>
国内有CentOS 6的debuginfo包的源镜像
查看>>
开发一个简易的PHP扩展
查看>>
网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门...
查看>>
linux 监控中的瑞士军刀 glances
查看>>
sprintf和snprintf的正确使用
查看>>
Smarty前端模板引擎 - 我看过的PHP开源框架
查看>>
iOS--音乐播放器之DOUAudioStreamer
查看>>
三大NoSQL数据库HBase、Cassandra和MongoDB大比拼
查看>>