qduoj - 小Z的集训队考验(拓扑排序+动态规划)
题目链接:点击查看
题目大意:给出一个有向图,问拓扑排序共有多少种方案,需要注意以下几点:
- 单点不算
- 完整的一条拓扑排序的起点入度必须为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的集训队考验(拓扑排序+动态规划)相关推荐
- hihoCoder 1175 拓扑排序
hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...
- P1494 [国家集训队]小Z的袜子
P1494 [国家集训队]小Z的袜子 题意: 有一个长度为 n 的序列c[i] .现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率. ...
- bzoj2038[2009国家集训队]小Z的袜子(hose)
bzoj2038[2009国家集训队]小Z的袜子(hose) 题意: 把N只袜子从1到N编号,每次求从编号为L到R的袜子中抽两只,有多大的概率抽到颜色相同的袜子. 题解: 不知道要用什么数据结构,但是 ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...
- [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- 数据结构(莫队算法):国家集训队2010 小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...
最新文章
- 网站流量突然下降从三方面进行判断病因
- [EOJ]2019 ECNU XCPC March Selection #4
- java内存分配与管理
- C# Azure 存储-分布式缓存Redis的新建配置查看
- springMVC 统一异常处理异常处理类的使用
- 需求决定设计,设计来源于需求
- 没有值的json字符串_Java中具有原始数据类型值的字符串连接
- iOS 禁止手势滑动翻页
- Thinkphp3.2版本Controller和Action的访问方法
- 除了速度与激情 领克01带给我另一种有关生活方式的想象
- Spark的RDD概要DAG概述
- Visual Studio 2008 WPF设计器智能提示(Intellisense)失效
- shiro设置session超时时间
- Linux服务器开发实战——QT控制界面+epoll聊天服务
- python画xy轴_用python建立两个Y轴的XY曲线图方法
- 怎样去除PDF编辑器页面的水印
- 超详细电烙铁如何使用?
- 用双向宽搜来提高搜索效率
- Compose Multiplatform结合MVI模式--初步尝试
- 浙江大学计算机学院博士论文格式,浙江大学博士学位论文模板.doc