首页 > 其他分享 >每日一题-P1261

每日一题-P1261

时间:2024-07-23 13:06:55浏览次数:7  
标签:pq int 每日 vis add 30005 一题 P1261 hd

其实想到方法了,但是以为复杂度炸了,好蠢

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int n,m,rk[30005],f[30005],g[30005],dis[30005],ans;
bool vis[30005];
vector<int> s;
struct edge{
	int v,w,nx;
}e[300005];
int cnt,hd[30005];
void add(int u,int v,int w){
	e[++cnt]=edge{v,w,hd[u]};
	hd[u]=cnt;
}
void add_edge(int u,int v,int w){
	add(u,v,w);add(v,u,w);
}
struct node{
	int u,l;
};
bool operator<(const node&x,const node&y){
	return x.l>y.l;
}
void dij(int st){
	priority_queue<node> pq;pq.push(node{st,0});
	dis[st]=0;
	while(!pq.empty()){
		int u=pq.top().u;pq.pop();
		if(vis[u])continue;
		vis[u]=1;ans++;s.pb(u);
		for(int i=hd[u];i;i=e[i].nx){
			int v=e[i].v;if(vis[v] || f[v]<=dis[u]+e[i].w || dis[v]<=dis[u]+e[i].w)continue;
			dis[v]=dis[u]+e[i].w;
			pq.push(node{v,dis[v]}); 
		} 
	}
	for(int u:s)g[u]=min(g[u],dis[u]),dis[u]=0x3f3f3f3f,vis[u]=0;
	s.clear();
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&rk[i]);
	for(int i=1;i<=m;i++){
		int u,v,w;scanf("%d%d%d",&u,&v,&w);
		add_edge(u,v,w);
	}
	memset(dis,0x3f,sizeof(dis));
	memset(f,0x3f,sizeof(f));
	for(int i=10;i>=1;i--){
		memset(g,0x3f,sizeof(g));
		for(int j=1;j<=n;j++)
			if(rk[j]==i)
				dij(j);
		for(int j=1;j<=n;j++)f[j]=min(f[j],g[j]);
	}
	printf("%d\n",ans);
	return 0;
} 

标签:pq,int,每日,vis,add,30005,一题,P1261,hd
From: https://www.cnblogs.com/kentsbk/p/18318146

相关文章

  • 每日一题-P1251
    网络流24题~#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintinf=1e9;constlllnf=1e18;intN,p,m,f,n,s,r[2005],st,ed;structedge{ intv,nx;llw;intc;}e[40005];intcnt,hd[4105];voidadd(intu,intv,llw,intc){ e[++cnt......
  • 【Golang 面试基础题】每日 5 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 7月22号python 每日一题
    7月22号python每日一题LCR121.寻找目标值-二维数组难度:中等m*n的二维数组plants记录了园林景观的植物排布情况,具有以下特性:每行中,每棵植物的右侧相邻植物不矮于该植物;每列中,每棵植物的下侧相邻植物不矮于该植物。请判断plants中是否存在目标高度值target。示......
  • 每日一题之快乐数问题
    题目:题目链接:快乐数题解:方法一:哈希表首先就是何种情况下不是快乐数,那就是处理过的结果多次重复出现的情况,那这里就可以通过哈希表在每次循环中存储处理后的结果,如果处理后的结果在哈希表中查找的到说明结果重复说明该数不是快乐数,退出循环即可,否则一直循环到处理结果为1......
  • Python每日学习
    我是从c++转来学习Python的,总感觉和c++相比Python的实操简单,但是由于写c++的代码多了,感觉Python的语法好奇怪就比如说c++的开头要有库(就是类似于#include<bits/stdc++.h>)而且它每一项的代码结束之后要有一个表示结束的封号(;),这种格式对于我来说已成习惯了,而这一切Python这个优......
  • GitHub每日最火火火项目(7.20)
    项目名称:mem0ai/mem0项目介绍:mem0是PersonalizedAI的内存层。它可能在个性化人工智能的开发中起到关键作用,具体的功能和特点可能包括高效的数据存储和管理,以支持个性化的模型训练和推理。通过优化内存使用,它可以提高人工智能系统的性能和响应速度,为用户提供更个性化......
  • GitHub每日最火火火项目(7.19)
    项目名称:mem0ai/mem0项目介绍:mem0是为个性化AI提供的内存层。它在个性化AI系统中可能起着关键作用,有助于高效地存储和管理数据,以支持个性化模型的训练和推理。通过优化内存使用,它可以提高AI系统的性能和响应速度,为用户提供更精准和个性化的服务。具体来说,它可能能够有效......
  • GitHub每日最火火火项目(7.18)
    项目名称:mem0ai/mem0项目介绍:mem0是用于个性化AI的内存层。它可能在构建个性化人工智能系统中发挥着重要作用,具体的功能和特点可能包括高效的数据存储和管理,以支持个性化的模型训练和推理。通过优化内存使用,它可以提高人工智能系统的性能和响应速度,为用户提供更加个性化......
  • 用AirScript脚本给女/男朋友发送每日早安邮件(极简版本)
     先看效果 工具金山文档/WPS提供了每日定时的AirScript脚本服务,非常方便~ 话不多说,我们以金山文档为例,只有简单的五个步骤,非常容易~教程开始步骤1我们打开金山文档新建一个智能表格步骤2按下图填写,注意是ABC这三列是否开启邮箱地址是否发送提醒是你的目的邮箱......
  • 初级java每日一道面试题-2024年7月19日
    在Java中,重载(Overloading)和重写(Overriding)是面向对象编程中多态性的两个重要概念。1.重载(Overloading)定义:重载是指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。也就是说,这些方法的名称相同,但参数的个数、类型或顺序至少有一个不同。目的:重载......