题目链接:点击查看

题目大意:给出一个有向图,问拓扑排序共有多少种方案,需要注意以下几点:

  1. 单点不算
  2. 完整的一条拓扑排序的起点入度必须为0,终点的出度必须为0

题目分析:问到了方案数肯定是动态规划,我们就要设计一下动态规划该怎么写,因为拓扑排序用到的是bfs,每次完整的排序都能得到一条单链,所以我们可以用树形dp的思想来设计,我们令dp[i]代表终点为i时的方案数,这样初始化时其他的点的dp全部是0,所有入度为0的点的dp全部为1,每次更新相邻顶点入度时,顺便转移一下状态即可,等访问到了出度为0的点时,说明该点已经是终点了,结果加上该点的dp值即可,注意对单点特判一下,因为单点的dp值肯定是1,所以我们在main函数中找出一共有多少个单点,然后让结果减去单点的数量就可以了,题目保证了答案在int范围内,所以题目也没有其他的坑点了

代码,更多的看注释吧:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int n,m;int ans;int in[N];//入度 int dp[N];vector<int>node[N];void topo()
{memset(dp,0,sizeof(dp));queue<int>q;for(int i=1;i<=n;i++)if(in[i]==0){dp[i]=1;q.push(i);}while(!q.empty()){int cur=q.front();q.pop();if(node[cur].empty())ans+=dp[cur];for(int i=0;i<node[cur].size();i++){int next=node[cur][i];in[next]--;dp[next]+=dp[cur];if(in[next]==0)    q.push(next);}}
}int main()
{
//  freopen("input.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){memset(in,0,sizeof(in));ans=0;for(int i=1;i<=n;i++)node[i].clear();while(m--){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);in[v]++;}for(int i=1;i<=n;i++)//处理一下单点:入度=出度=0 if(in[i]==0&&node[i].empty())ans--;topo();printf("%d\n",ans);}return 0;
}

qduoj - 小Z的集训队考验(拓扑排序+动态规划)相关推荐

  1. hihoCoder 1175 拓扑排序

    hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  3. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

  4. P1494 [国家集训队]小Z的袜子

    P1494 [国家集训队]小Z的袜子 题意: 有一个长度为 n 的序列c[i] .现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率. ...

  5. bzoj2038[2009国家集训队]小Z的袜子(hose)

    bzoj2038[2009国家集训队]小Z的袜子(hose) 题意: 把N只袜子从1到N编号,每次求从编号为L到R的袜子中抽两只,有多大的概率抽到颜色相同的袜子. 题解: 不知道要用什么数据结构,但是 ...

  6. P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  7. 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))

    莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...

  8. [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  9. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...

最新文章

  1. 网站流量突然下降从三方面进行判断病因
  2. [EOJ]2019 ECNU XCPC March Selection #4
  3. java内存分配与管理
  4. C# Azure 存储-分布式缓存Redis的新建配置查看
  5. springMVC 统一异常处理异常处理类的使用
  6. 需求决定设计,设计来源于需求
  7. 没有值的json字符串_Java中具有原始数据类型值的字符串连接
  8. iOS 禁止手势滑动翻页
  9. Thinkphp3.2版本Controller和Action的访问方法
  10. 除了速度与激情 领克01带给我另一种有关生活方式的想象
  11. Spark的RDD概要DAG概述
  12. Visual Studio 2008 WPF设计器智能提示(Intellisense)失效
  13. shiro设置session超时时间
  14. Linux服务器开发实战——QT控制界面+epoll聊天服务
  15. python画xy轴_用python建立两个Y轴的XY曲线图方法
  16. 怎样去除PDF编辑器页面的水印
  17. 超详细电烙铁如何使用?
  18. 用双向宽搜来提高搜索效率
  19. Compose Multiplatform结合MVI模式--初步尝试
  20. 浙江大学计算机学院博士论文格式,浙江大学博士学位论文模板.doc

热门文章

  1. SpringBoot内置Tomcat支持多大并发量和连接数
  2. HystrixDashbord
  3. 用zookeeper来实现分布式锁
  4. SimpleExecutor.doQuery()-创建Statement
  5. 数据库压力变大,读写分离吧
  6. 什么是bean的生命周期?
  7. vue指令-单向和双向绑定
  8. 格式化输出浮点型变量
  9. MYBATIS 批量update 报错的问题
  10. 原型的指向是否可以改变 原型最终指向了哪里 原型指向改变如何添加方法和访问