首页 > 其他分享 >DAG 求u到v路径数

DAG 求u到v路径数

时间:2024-09-04 08:52:44浏览次数:3  
标签:cnt DAG int 路径 head edge ans

DAG 求u到v的路径数

image

先拓扑排序求出每个点的顺序,再对每个起点 \(s\) 做 dp,遍历拓扑序的点,对 \(s\) 能到达的点做 dp 统计路径数,如果终点 \(t\) 拓扑序在 \(s\) 之前就说明没有路径。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200005
const int mod=1e9+7;

int n,m,qq;

int cnt=0;
struct Edge{
	int to,next;
}edge[2*N];
int head[N];

void add_edge(int u,int v){
	cnt++;
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	head[u]=cnt;
} 

int in[N];
queue<int> q;

vector<int> a;

void topo_sort(){
	
	for(int i=1;i<=n;i++){
		if(!in[i]){
			q.push(i);
		}
	}
	
	while(!q.empty()){
		int x=q.front();
		q.pop();
		a.push_back(x);
		
		for(int i=head[x];i!=-1;i=edge[i].next){
			int y=edge[i].to;
			
			if(--in[y]==0){
				q.push(y);
			}
		}
	}
}

int ans[N];

void dp(int s){
	
	for(int i=1;i<=n;i++){
		ans[i]=0;
	} 
	ans[s]=1;
	
	for(int i=0;i<a.size();i++){
		int x=a[i];
		
		if(ans[x]>0){//起点 s 能到这个点 
			for(int j=head[x];j!=-1;j=edge[j].next){
				ans[edge[j].to]+=ans[x];
				ans[edge[j].to]%=mod;	
			}
		}
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m>>qq;
	
	for(int i=1;i<=n;i++){
		head[i]=-1;
	} 
	
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		add_edge(u,v);
		in[v]++;
	}
	
	topo_sort();
	
	for(int i=1;i<=qq;i++){
		int s,t;
		cin>>s>>t;
		
		dp(s);
		
		cout<<ans[t]<<"\n";	
	}
	return 0; 
}

标签:cnt,DAG,int,路径,head,edge,ans
From: https://www.cnblogs.com/sadlin/p/18395756

相关文章

  • Java学习路径
    1.Java基础Java语法:变量、数据类型、控制结构(if、for、while等)面向对象编程:类、对象、继承、多态、接口异常处理:try-catch-finally,创建自定义异常集合框架:List、Set、Map等2.Java高级特性泛型:如何使用和创建泛型类和方法流(Streams)和Lambda表达式:处理集合和数据流多线......
  • 120.三角形最小路径和
    1.题目描述给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标+1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到......
  • 多模块项目中,模块的某个类的主方法和测试方法,他们文件访问的相对路径的根目录不同
    遇到问题在编写某个多模块项目的某个类时,在方法中使用Properties读取配置文件,出现的错误。这里假定项目名为project,模块名为modular。importorg.junit.Test;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Properties......
  • 多目标应用:基于自组织多模态多目标鸽群优化算法MMOPIO的移动机器人路径规划研究(提供MA
      一、机器人路径规划介绍移动机器人(Mobilerobot,MR)的路径规划是移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大......
  • PbootCMS 后台常用文件修改路径位置
    在PbootCMS中,后台常用文件通常保存在 apps\admin\view\default 目录中。以下是常用的几个文件及其路径,这些文件在使用过程中可能需要修改一些文字内容。以下是具体的文件路径和用途说明:1.登录页页面修改文件路径:plaintext apps\admin\view\default\index.html用途......
  • 【路径规划】月球车DEM生成与局部和全球路径规划
    摘要本文使用MATLAB和优化工具箱(OptimizationToolbox)解决了无人机在矢量风场中尽可能短时间穿越的问题。通过分析不同路径规划算法的性能,本文提出了一种优化路径的方法,能够在复杂环境中快速规划最佳路径,以实现时间最小化的目标。该研究为无人机及其他移动机器人的路径规划......
  • 【路径规划】在二维环境中快速探索随机树和路径规划的示例
    摘要本文介绍了快速探索随机树(Rapidly-exploringRandomTree,RRT)算法在二维环境中的路径规划应用。RRT是一种随机采样算法,能够快速构建从起点到目标点的路径,特别适用于复杂环境中的机器人路径规划。通过在随机方向上扩展树结构,RRT算法能够高效避开障碍物并找到一条可行路径......
  • 大模型LLM学习路线图2024年最新版!全面掌握学习路径,非常详细,想学大模型收藏这一篇就够
    ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料,让不少人惊呼:“未来是属于AI的”。AI大模型——成为互联网从业者必备技能。......
  • 大模型LLM学习路线图2024年最新版!全面掌握学习路径,非常详细,想学大模型收藏这一篇就够
    ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料,让不少人惊呼:“未来是属于AI的”。AI大模型——成为互联网从业者必备技能。......
  • svnhooks--分路径锁定仓库
    在之前的文章简单的实现了锁定仓库已经授予用户权限提交文件,但是在实际项目中,有时候我们是要锁定资源路径,不允许提交资源了,但是还可以提交配置和代码,那就需要通过分路径锁定。实现方式和思路也是借助pre-commit,我们先在程序里面定义一个字典,简单点我们就不用数据库了,数据先初始化......