首页 > 其他分享 >比特跳跃

比特跳跃

时间:2024-07-26 19:50:40浏览次数:8  
标签:minn 比特 int long 100005 cc while 跳跃

  • 这次真的是差五分钟就能过掉这题了,好可惜呀
  • 二进制数位的包含关系构成一颗树,我们可以在这棵树上DP来统计一些信息
  • 十五分钟加上这样一个DP,未必来不及。只是,越到时间紧张的关头,越要屏蔽其他念想的干扰,告诉自己不去管时间,把注意力集中在代码的编写上
  • 如果你写完代码能一遍过,那时间往往是来得及的
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int>a[100005];
vector<int>c[100005];
priority_queue<pair<long long,int> >q;
long long d[100005],g[100005];
bool f[100005];
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
void dijkstra()
{
	int cnt=0;
	while(cnt<n&&!q.empty())
	{
		int p=q.top().second;
		long long va=-q.top().first;
		q.pop();
		if(f[p]==true||va!=d[p])
		{
			continue;
		}
		f[p]=true;
		cnt++;
		for(int i=0;i<a[p].size();i++)
		{
			if(d[p]+c[p][i]<d[a[p][i]])
			{
				d[a[p][i]]=d[p]+c[p][i];
				q.push(make_pair(-d[a[p][i]],a[p][i]));
			}
		}
	}
}
long long dp(int x)
{
	if(g[x]!=-1)
	{
		return g[x];
	}
	if(x==(x&(-x)))
	{
		return g[x]=d[x];
	}
	long long minn=LLONG_MAX;
	for(int i=0;i<17;i++)
	{
		if(((x>>i)&1)==1)
		{
			minn=min(minn,dp(x&(~(1<<i))));
		}
	}
	return g[x]=minn;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		long long k;
		cin>>n>>m>>k;
		while(!q.empty())
		{
			q.pop();
		}
		for(int i=1;i<=n;i++)
		{
			a[i].clear();
			c[i].clear();
			f[i]=false;
			d[i]=LLONG_MAX;
			g[i]=-1;
		}
		for(int i=1;i<=m;i++)
		{
			int u,v,w;
			u=read1();
			v=read1();
			w=read1();
			a[u].push_back(v);
			a[v].push_back(u);
			c[u].push_back(w);
			c[v].push_back(w);
		}
		d[1]=0;
		q.push(make_pair(-d[1],1));
		dijkstra();
		for(int i=1;i<=n;i++)
		{
			dp(i);
		}
		while(!q.empty())
		{
			q.pop();
		}
		d[1]=0;
		q.push(make_pair(-d[1],1));
		f[1]=false;
		for(int i=2;i<=n;i++)
		{
			f[i]=false;
			if(g[i]!=LLONG_MAX)
			{
				d[i]=min(g[i]+k*i,k*(1|i));
			}
			else
			{
				d[i]=k*(1|i);
			}
			q.push(make_pair(-d[i],i));
		}
		dijkstra();
		for(int i=2;i<=n;i++)
		{
			printf("%lld ",d[i]);
		}
		cout<<endl;
	}
	return 0;
}

标签:minn,比特,int,long,100005,cc,while,跳跃
From: https://www.cnblogs.com/watersail/p/18326141

相关文章

  • 【unity实战】完美的2D横版平台跳跃玩家控制器,使用InputSystem+有限状态机实现人物加
    最终效果文章目录最终效果前言素材目录结构动画配置检测脚本状态机玩家有限状态机玩家控制脚本定义人物不同状态待机移动跳跃下落状态落地状态墙壁滑行状态蹬墙跳状态蹬墙跳下落状态一段近战攻击状态二段近战攻击状态冲锋状态土狼时间状态攀爬开始状态攀爬进行状态功能......
  • 并查集跳跃
    $\quad$在解决区间问题时,如果直接修改或者线段树不好维护且总共的有效修改很小时,我们就可以考虑使用并查集来解决问题。$\quad$问题中的各元素需要满足一定的条件,我们在遍历的时候,如果当前元素修改完之后仍然满足条件,那么我们就可以直接跳到后面的位置后面第一个满足条件的位......
  • 洛谷B3626(跳跃机器人)解析
     这道题的网址洛谷B3626请速览一遍原题当然,咱们来进行题面关键信息提取 1.机器人从第1个格子出发;2.设机器人目前所在格子的编号为x,则它能够跳到格子的编号可能是x,x+1或2x,也就是说,新跳到格子的编号,可能是比原来格子编号少1或多1,或是其2倍;3.不允许跳出界,举个简单的例子......
  • 代码随想录算法训练营第30天 | 贪心算法 2: 122.买卖股票的最佳时机II、55. 跳跃游戏
    代码随想录算法训练营第30天|贪心算法2:122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和122.买卖股票的最佳时机IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/代码随想录https://programmerca......
  • 代码随想录day 29 买卖股票的最佳时机II | 跳跃游戏 | 跳跃游戏II | K次取反后最大化
    买卖股票的最佳时机II买卖股票的最佳时机II解题思路利用贪心算法,只要股票卖了后一天能获利,就买了,所以只要遍历一下整个数组,根据这个算法就能得到最终获利的数目知识点贪心心得歪打正着的一题跳跃游戏跳跃游戏解题思路利用贪心算法,只需要有一次跳转到数组之外说明就能跳......
  • BTC比特币实时行情API接口
    BTC比特币实时行情API接口#RestfulAPIhttps://tsanghi.com/api/fin/crypto/realtime?token={token}&ticker={ticker}指定加密货币代码,获取该加密货币的实时行情(开、高、低、收)。更新周期:实时。请求方式:GET。#测试比特币接口https://tsanghi.com/api/fin/cr......
  • redis学习-12(实现分布式锁、消息队列、缓存一致性问题、单线程快的原因、跳跃表)
    引用以下内容:redis实现分布式锁:Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)Redis实现分布式锁的7种方案,及正确使用姿势!redis实现消息队列Redis的学习教程(十)之使用Redis实现消息队列缓存一致性问题想要保证数据库和Redis缓存一致性,推荐采用先更新数......
  • 大端小端、MSB和LSB、字节序和比特序
    CPU架构决定大小端模式_cpu架构与大小端的关系-CSDN博客常见处理器大小端_大端系统有哪些-CSDN博客大端存储、小端存储端序(英语:Endianness),又称字节顺序,又称尾序,在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。大小端存储的关系主要涉及数据......
  • Redis数据结构—跳跃表 skiplist 实现源码分析
    Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis的数据结构非常丰富,其中跳跃表(skiplist)是一种重要的数据结构,它被用来实现有序集合(sortedsets)。跳跃表是一种概率型数据结构,它通过多层链表来实现快速的查找操作。跳跃表的结构类似于多层索引,......
  • 跳跃系统的完善
     Jump()privatevoidJump(){  if(Input.GetKey(KeyCode.Z))  {    jumpTimer-=Time.deltaTime;    if(jumpTimer>0)    {      rigi.AddForce(newVector2(0,jumpForce),ForceMode2D.Force);      ......