Air Conditioners

news/2024/10/18 10:14:54/

题目链接:https://codeforces.com/problemset/problem/1547/E

这个题意比较容易理解,就是让我们求每个空格的最低温度,这道题目可以用最短路解决,我们可以让每两个相邻的点的距离为1,然后建立一个虚拟源点,把每个装有空调的格子与虚拟源点连一条边,权值为空调的温度,最后直接跑一个dijkstra就可以求得答案,下面是代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
typedef pair<int,int> PII;
const int N=1e6;
int h[N],e[N],ne[N],w[N],idx,dist[N];
bool vis[N];
int p[N];
void add(int x,int y,int z)
{e[idx]=y;w[idx]=z;ne[idx]=h[x];h[x]=idx++;
}
void dijkstra()
{priority_queue<PII,vector<PII>,greater<PII> >q;q.push({0,0});dist[0]=0;while(q.size()){int begin=q.top().second;q.pop();if(vis[begin]) continue;vis[begin]=true;for(int i=h[begin];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[begin]+w[i]){dist[j]=dist[begin]+w[i];q.push({dist[j],j});}}}return ;
}
int main()
{int q;cin>>q;while(q--){int n,k;scanf("%d%d",&n,&k);//建立虚拟源点h数组要从0开始赋值 for(int i=0;i<=n;i++)//用memset会超时(memset会对整个数组赋初值) {h[i]=-1;dist[i]=0x3f3f3f3f;vis[i]=false;}idx=0;for(int i=1;i<=k;i++)scanf("%d",&p[i]);int t;for(int i=1;i<=k;i++)//建立虚拟远点与有空调的格子的有权边 {scanf("%d",&t);add(0,p[i],t);} for(int i=1;i<n;i++){add(i,i+1,1);add(i+1,i,1);}dijkstra();for(int i=1;i<=n;i++)printf("%d ",dist[i]);puts(""); }return 0;
}

下面再分享一种做法:

我们考虑第i个格子的温度与哪些点的关系最密切,不难想到他与两边相邻的格子关系最为密切,要么就是由左边格子更新,要么就是由右边的格子更新,亦或者是自己本身的值,有了这个想法之后我们就可以用动态规划来做这道题目,动态转移方程就是t [ i ]=min( t [ i ] , t [ i -1 ]),和t [ i ]=min( t [ i ] , t [ i +1 ]),下面是代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int N=1e6+10;
int dp[N],p[N];
int main()
{int q;cin>>q;while(q--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)dp[i]=0x3f3f3f3f;for(int i=1;i<=k;i++)scanf("%d",&p[i]);int t;for(int i=1;i<=k;i++){scanf("%d",&t);dp[p[i]]=t;}for(int i=2;i<=n;i++)//由左向右更新 dp[i]=min(dp[i-1]+1,dp[i]);for(int i=n-1;i>=1;i--)//由右向左更新 dp[i]=min(dp[i+1]+1,dp[i]);for(int i=1;i<=n;i++)printf("%d ",dp[i]);puts("");}return 0;
}

http://www.ppmy.cn/news/702525.html

相关文章

AIR是什么?.air文件如何打开?flex如何运行air文件

1 安装Adobe AIR 运行时&#xff0c;和java的JVM类似。 Adobe AIR 运行时允许在桌面运行AIR应用程序&#xff0c;脱离游览器的束缚。 下载安装文件 http://labs.adobe.com/downloads/air.html 在下载页面有样例程序&#xff08;Sample Applications&#xff09;http://labs…

ADOBE AIR是什么?

AIR是一项自2007年来备受推崇的新型技术&#xff0c;它又可以说是对新老技术的结合体。通过这样的结合&#xff0c;我们发现&#xff0c;确实让客户感受得到了很好的改善&#xff0c;比如说&#xff1a;客户更愿意多进行一些操作、更愿意去体验一下新的功能。因为它实在太迷人了…

Cesium 常用标绘线、面、矩形、圆、曲面、曲线、攻击箭头、钳击箭头,标绘与修改。

前言&#xff1a;直接放效果图&#xff0c;符合就往下看&#xff0c;不符合出门右转。 由于篇幅有限&#xff0c;只贴出各个标绘的关键代码。 1、线段 基于坐标点&#xff0c;加载不同的材质。 //动态加载 const entity this._viewer.entities.add({polyline: {positions: …

14 动态主题类型Dynamic Topic Types

14 动态主题类型Dynamic Topic Types eProsima Fast DDS提供了一种动态方式来定义和使用主题类型和主题数据。我们的实现遵循用于DDS接口的OMG可扩展和动态主题类型。有关更多信息,您可以阅读DDS XTypes V1.2的规范。 动态主题类型提供了在没有与IDL相关的限制的情况下通过RTP…

Hive on Spark的小文件设置参数

Hive on Spark的小文件设置参数 参数调优 了解完了Spark作业运行的基本原理之后&#xff0c;对资源相关的参数就容易理解了。所谓的Spark资源参数调优&#xff0c;其实主要就是对Spark运行过程中各个使用资源的地方&#xff0c;通过调节各种参数&#xff0c;来优化资源使用的效…

nacos部署并配置权限

nacos部署并配置权限 部署 配置JDK环境 下载JDK 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ tar xf jdk-8u371-linux-x64.tar.gz配置环境变量 echo "JAVA_HOME/root/nacos/jdk1.8.0_371" >>/etc/profile echo "expor…

基于bootstrap的双边栏选择框_iphone自带Dock栏美化功能,你out了

在往期文章中一直在为大家分享iphone特效壁纸&#xff0c;很多小伙伴都有使用过&#xff0c;尤其是其中的隐藏Dock栏与Dock栏特效备受大家喜爱&#xff0c;纷纷转发现在网络上热度非常高&#xff0c;没有获取的小伙伴可以在本公众号会话框导航栏内点击功能然后选择特效壁纸进行…

安卓桌面壁纸_效仿安卓?iOS14或将支持“快应用” 功能 可玩性更强了

苹果将在6月份的WWDC大会上发布iOS14&#xff0c;而随着大会的临近&#xff0c;关于iOS14的消息也是时不时出现在大家面前。从泄露的iOS14测试版代码中可以看到即将到来的新功能&#xff0c;其中一个叫做Clips的API接口尤其受到关注。 这项功能接口为开发者提供&#xff0c;它允…