当前位置: 首页 > news >正文

洛谷P3196C语言题解

根据题目最容易想到的肯定就是使用dfs进行解决

虽然知道可能会被时间复杂度卡,但是好像也没有其他方法了

最初的代码

#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node
{int data;struct node*next;
}node;
int max=0;
node*nod[1000000];
int book[1000000];
void dfs(int x){if(x>max)max=x;node*tmp=nod[x]->next;while(tmp){if(!book[tmp->data]){book[tmp->data]=1;dfs(tmp->data);}tmp=tmp->next;}
}
int main(){int  n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){nod[i]=(node*)malloc(sizeof(node));nod[i]->data=i;nod[i]->next=NULL;}for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);node*p=nod[x];while(p->next!=NULL&&p->next->data)p=p->next;node*tmp=(node*)malloc(sizeof(node));tmp->data=y;tmp->next=p->next;p->next=tmp;}for(int i=1;i<=n;i++){memset(book,0,sizeof(int)*100000);max=0;dfs(i);printf("%d ",max);}
}

如何解决:

如果我们每一次都是从要查的点出发,如果他和另外一个点最大能到达的点是一个,那么时间不是多花了一次嘛

如果我们知道这个点能被其余的点达到而且他还是最大的那一个点,势必会比赏面的dfs快

如何实现

为了实现上面的方法,我们要反向建边,这要我们才能知道大的点位可以到达哪些点位

同时,如果一个大的点位已经到过了一个点,那么后续较小的点位就没必要再从那个点位进行dfs(先前的大点dfs已经将从该点能到到达的点位包括他自己能到到达的最大点位更新为大的那个了)

#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node
{int val;struct node*next;
}node;
node* nod[100001];
int maxn[100001];
int book[100001];
void dfs(int index,int ori){//查到了哪个点位,从哪个点开始查的if(book[index])return;book[index]=1;if(maxn[index]<ori)maxn[index]=ori;node*p=nod[index]->next;while(p){if(book[p->val]==0)dfs(p->val,ori);p=p->next;}return;
}
int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){nod[i]=(node*)malloc(sizeof(node));nod[i]->val=i;nod[i]->next=NULL;maxn[i]=i;}while(m--){int a,b;scanf("%d%d",&a,&b);node *p=(node*)malloc(sizeof(node));p->val=a;p->next=nod[b]->next;nod[b]->next=p;}for(int i=n;i>0;i--){if(nod[i]->next)dfs(nod[i]->val,i);}for(int i=1;i<=n;i++)printf("%d ",maxn[i]);
}

http://www.xdnf.cn/news/106885.html

相关文章:

  • PHP CURL发送POST请求(支持HEADER参数配置)
  • Kubernetes 集群内访问外部服务的三种实践方案
  • 软件工程的13条“定律”:从Hyrum定律到康威定律,再到Zawinski定律
  • 锤子线,买入准确概率是多少
  • leetcode-数组
  • Retrofit框架分析(二):注解、反射以及动态代理,Retrofit框架动态代理的源码分析
  • bert学习
  • AIGC的伦理困境:机器生成内容是否该被监管?
  • 动态脚本引擎QLExpress,实现各种复杂的业务规则
  • 深度学习驱动的车牌识别:技术演进与未来挑战
  • 创建第一个Spring Boot项目
  • pytorch(gpu版本安装)
  • Javase 基础入门 —— 04 继承
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·数字三角形
  • openssh-10.0p1用于修复CVE-2025-26465、CVE-2025-26466
  • java springBoot 整合 扣子cozeAI 智能体 对话
  • AI 人工智能模型:从理论到实践的深度解析⚡YQW · Studio ⚡【Deepseek】【Chat GPT】
  • python函数与模块
  • PyCharm 链接 Podman Desktop 的 podman-machine-default Linux 虚拟环境
  • YOLO学习笔记 | 从YOLOv5到YOLOv11:技术演进与核心改进
  • JVM学习笔记
  • Spark论述及其作用
  • 五、实现隐藏(Hiding the Implementation)
  • 记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
  • Windows 同步技术-一次性初始化
  • Discuz!与DeepSeek的AI融合:打造智能网址导航新体验——以“虎跃办公”为例
  • 15.FineReport动态展示需要的列
  • 运维案例:让服务器稳定运行,守护业务不掉线!
  • 块压缩与图片压缩优缺点对比
  • 高可靠性厚铜PCB生产的五大关键设备