【算法每日一练]-图论(保姆级教程 篇3(遍历))#图的遍历 #奶牛牧场 #杂务

今天讲图的遍历

目录

题目:图的遍历

思路:

题目:奶牛牧场

思路:  

题目:杂务

思路:


        

题目:图的遍历

        

思路:

         

正向建边需要跑O(N^2)会超时,所以反向建边,先从最大的点出发,能到的所有点都是最大点的值,然后更新下一个没有被更新过的点,
这样只需要O(n)就行,而且因为是从大到小遍历每个点,这样以来,每个点第一个更新的值便是最大值

        

#include <bits/stdc++.h>
#define N 100005
using namespace std;
int n,m,a[N];
vector <int>p[N];
void dfs(int x,int v){//从v点出发,可以到x点
	a[x]=v;     //所以这个x点能到的最大点就是v
	for(int i=0;i<p[x].size();i++){
		if(!a[p[x][i]]) dfs(p[x][i],v);//如果这个p[x][i]点没有更新过,就用当前点的值进行更新
	}
}
int main(){
	cin>>n>>m;int u,v;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		p[v].push_back(u);//反向建边,箭头都逆向一下
	}
	for(int i=n;i>=0;i--){
		if(a[i]==0) dfs(i,i);//每个点都出发进行更新,被更新过的点不能再更新,否则一定会变小
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<' ';
	}
	return 0;
}

        

        

题目:奶牛牧场

        

思路:

不要奇怪,我写了bfs和dfs两种遍历方法,哪个都行

#include <bits/stdc++.h>
using namespace std;
const int K=105,N=1005;
int k,n,m,ans;
int a[K],cnt[N],vis[N];//cnt是能到此点的起点个数
vector<int>ve[N];
void dfs(int u){
	if(vis[u])return ;
	cnt[u]++;vis[u]=1;
	for(int i=0,sz=ve[u].size();i<sz;i++){
		if(vis[ve[u][i]])continue;//注意这里是v[][]
		dfs(ve[u][i]);//个人认为vis=1放这里也可以
	}
}
void bfs(int u);
int main(){
	cin>>k>>n>>m;int x,y;
	for(int i=1;i<=k;i++)cin>>a[i];//保存每个奶牛的位置
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		ve[x].push_back(y);
	}
	for(int i=1;i<=k;i++){
		memset(vis,0,sizeof(vis));
	//	dfs(a[i]);
		bfs(a[i]);
	}
	for(int i=1;i<=n;i++)	if(cnt[i]==k)ans++;
	cout<<ans;
}


void bfs(int u){
	queue<int>q;
	q.push(u);
	while(!q.empty()){
		int cur=q.front();q.pop();
		if(vis[cur])continue;
		vis[cur]=1;cnt[cur]++;
		for(int i=0,sz=ve[cur].size();i<sz;i++){
			int v=ve[cur][i];
			if(vis[v])continue;
			q.push(v);
		}
	}
	
}


        

        

题目:杂务

        

思路:

         

注意到前驱任务可以并发执行,所以我们只需要完成最长前驱就行

直接topo排序就行,不过这里提供一种dfs的topo排序

vis[x]=max(vis[x],dfs(v[x][i])+tim[x]); 其实在树形dp的时候就已经见过一面的

        

#include <bits/stdc++.h> 
#define N 10010
using namespace std;
vector <int> v[N];
int n,ans,tim[N],vis[N];//vis[x]存放完成任务x所需要的时间
int dfs(int x){
	if(vis[x]) return vis[x];   //枝剪
	for(int i=0;i<v[x].size();i++){
		vis[x]=max(vis[x],dfs(v[x][i])+tim[x]);//递推公式
	}
	return vis[x];
}
int main(){
	cin>>n;int x,y;
	for(int i=1;i<=n;i++){
		cin>>x>>tim[x];//输入x,耗时tim[x]
		while(cin>>y&&y!=0){
			v[x].push_back(y);//正向建边,x的准备工作为y
		}
		if(v[x].size()==0)vis[x]=tim[x];
	}
	for(int i=1;i<=n;i++){
		ans=max(ans,dfs(i));     //因为没有关系的两个任务可以并发执行
	}
	cout<<ans;
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/154689.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解锁编程潜能:探索亚马逊CodeWhisperer,打造编程世界的声音引导者

文章目录 前言一、什么是 Amazon CodeWhisperer&#xff1f;二、如何使用CodeWhisperer&#xff1f;安装CodeWhisperer插件配置CodeWhisperer生成注释和文档 总结 前言 随着CHATGPT的一声巨响&#xff0c;大语言模型已经成为了一个备受瞩目的创新应用。亚马逊云科技作为全球领…

Java常用命令行指令有哪些?Java指令分享!

在Java开发中&#xff0c;命令行工具是非常重要的&#xff0c;它们允许开发人员执行各种任务&#xff0c;从编译和运行Java程序到管理Java虚拟机。本文将介绍一些常用的Java命令行指令&#xff0c;并通过具体实例演示它们的用法。 1. 编译Java源代码 使用javac命令可以将Java源…

贪吃蛇基础知识铺垫2(c语言)

宽字符的打印 那如果想在屏幕上打印宽字符&#xff0c;怎么打印呢&#xff1f; 宽字符的字⾯量必须加上前缀“L”&#xff0c;否则 C 语⾔会把字⾯量当作窄字符类型处理。前缀“L”在单引 号前⾯&#xff0c;表⽰宽字符&#xff0c;对应 wprintf() 的占位符为 %lc &#xff1b…

[Linux]NFS文件共享服务

一、NFS 1.1 NFS的简介 NFS&#xff08;Network File System 网络文件服务&#xff09;&#xff0c;是一种基于 TCP/IP 传输的网络文件系统协议&#xff0c;最初由 Sun 公司开发。 NFS 服务的实现依赖于 RPC&#xff08;Remote Process Call&#xff0c;远端过程调用&#x…

Hacker 资讯|11 月中下旬区块链黑客松活动汇总

「TinTin Hacker 快讯」是 TinTinLand 建立的一个资讯专栏&#xff0c;汇集近期线上线下的黑客松及 Grant&#xff0c;旨在帮助开发者和区块链爱好者获取最新的黑客松资讯&#xff0c;鼓励他们了解并根据自身情况参与不同的黑客松&#xff0c;更好地建设 Web3 生态。 2023 Wint…

被保留的IP地址:潜在用途和管理策略

在互联网的底层&#xff0c;存在一些特定范围的IP地址被保留&#xff0c;不分配给特定的设备或组织。这些被保留的IP地址有着特殊的用途&#xff0c;涉及网络通信、安全性和私有网络等方面。本文将深入探讨被保留的IP地址的潜在用途以及管理策略。 1. 被保留的IP地址范围 被保留…

【算法基础】分解质因数

文章目录 什么是分解质因数具体案例输入格式输出格式数据范围 原理讲解原始方法转换思路利用试除法判定质数的思路为什么不需要单独判断是否为质数 什么是分解质因数 分解质因数是指将一个合数用质因数相乘的形式表示出来&#xff0c;即将一个合数分解为若干个质数的乘积。其中…

接口自动化测试如何实现?5个步骤轻松拿捏!

最近接到一个接口自动化测试的case&#xff0c;并展开了一些调研工作&#xff0c;最后发现&#xff0c;使用pytest测试框架并以数据驱动的方式执行测试用例&#xff0c;可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

python+requests接口自动化完整项目设计源码

前言 有很多小伙伴吵着要完整的项目源码&#xff0c;完整的项目属于公司内部的代码&#xff0c;这个是没法分享的&#xff0c;违反职业道德了&#xff0c;就算别人分享了&#xff0c;也只适用于本公司内部的业务。 所以用例的代码还是得自己去一个个写&#xff0c;我只能分享…

4.4.2.1 内部类

内部类 成员内部类 定义 调用内部类 访问修饰符的影响 外部类的成员变量及成员方法在内部类的使用 内部类在外部类的使用 静态内部类 静态内部类调用非静态外部类 1

乡村电商人才齐聚浙江建德,这场农播氛围值已拉满!

“3、2、1&#xff0c;上链接!” “现场营造了很好的交流氛围&#xff0c;碰撞出了不少合作机会。” “农播让我们有机会为家乡农产品代言&#xff0c;并且通过电商平台&#xff0c;把优质农特产品卖到全国各地。” “就像是一个演员需要一个舞台&#xff0c;一个好产品也需…

企业邮箱认证指南:安全与高效的邮箱认证方法

企业邮箱是专门为企业提供的电子邮件服务&#xff0c;安全性和专业性更高。在开始使用企业邮箱之前&#xff0c;很多人会有一些问题&#xff0c;比如企业邮箱需要认证吗、如何开通企业邮箱&#xff0c;以及哪款企业邮箱好。 1、企业邮箱在使用前需要认证吗&#xff1f; 答案是肯…

数据结构(c语言版本) 二叉树的遍历

要求 实现二叉树的创建&#xff0c;并输入二叉树数据 然后先序遍历输出二叉树、中序遍历输出二叉树、后序输出二叉树 例如二叉树为&#xff1a; 该二叉树的先序遍历结果为&#xff1a; A B D C E F 该二叉树的中序遍历结果为&#xff1a; B D A E C F 该二叉树的后序遍历结果…

互联网上门预约洗衣洗鞋店小程序;

拽牛科技干洗店洗鞋店软件&#xff0c;方便快捷&#xff0c;让你轻松洗衣。只需在线预约洗衣洗鞋服务&#xff0c;附近的门店立即上门取送&#xff0c;省心省力。轻松了解品牌线下门店&#xff0c;通过列表形式展示周围门店信息&#xff0c;自动选择最近门店为你服务。简单填写…

分布式下多节点WebSocket消息收发

1、使用场景 2、疑问 第一次发送请求后&#xff0c;通过N1&#xff0c;W2&#xff0c;到达service2&#xff0c;建立websocket连接。 1、接下来发送的消息&#xff0c;通过Ngixn后和网关gateway后还能落在service2上面吗&#xff1f; 如果不能落在service2上&#xff0c;需要怎…

【C语法学习】25 - strncpy()函数

文章目录 1 函数原型2 参数3 返回值4 使用说明5 示例5.1 示例15.2 示例2 1 函数原型 strncpy()&#xff1a;将str指向的字符串的前n个字符拷贝至dest&#xff0c;函数原型如下&#xff1a; char *strncpy(char *dest, const char *src, size_t n);2 参数 strncpy()函数有三个…

【服务端性能测试】性能测试指标!

接触过性能测试的小伙伴一定都听过响应时间&#xff08;Response Time&#xff09;、TPS、CPU资源利用率等术语&#xff0c;它们都属于性能测试的指标。本文对性能测试中涉及到的指标做了较为详细的整理。 性能测试指标一般可以分为系统性能指标、资源指标、应用指标&#xff…

【路径穿越】vulfocus/apache-cve_2021_41773

1.1漏洞描述 漏洞编号cve_2021_41773漏洞类型路径穿越漏洞等级高危漏洞环境vulfocus攻击方式 1.2漏洞等级 高危 1.3影响版本 Apache HTTP Server 2.4.49、2.4.50 1.4漏洞复现 1.4.1.基础环境 靶场VULFOCUS工具BurpSuite 1.4.2.前提 1.5深度利用 1.5.1漏洞点 利用网上爆出…

Nginx 可视化管理平台:nginx-proxy-manager

本心、输入输出、结果 文章目录 Nginx 可视化管理平台:nginx-proxy-manager前言nginx-proxy-managernginx-proxy-manager 特性快速开始使用 Docker 网络开启 Docker 健康检查相关可视化页面相关链接弘扬爱国精神Nginx 可视化管理平台:nginx-proxy-manager 编辑:简简单单 Onl…

打开文件 和 文件系统的文件产生关联

补充1&#xff1a;硬件级别磁盘和内存之间数据交互的基本单位 OS的内存管理 内存的本质是对数据临时存/取&#xff0c;把内存看成很大的缓冲区 物理内存和磁盘交互的单位是4KB&#xff0c;磁盘中未被打开的文件数据块也是4KB&#xff0c;所以磁盘中页帧也是4KB&#xff0c;内存…