首页 > 其他分享 >D. Explorer Space

D. Explorer Space

时间:2024-07-14 13:18:28浏览次数:5  
标签:经过 Explorer Space int 路径 back push 条边

原题链接

题解

1.易得当 \(k\) 为奇数时,答案肯定为 \(-1\)
2.当 \(k\) 为偶数时,经过 \(k\) 条边返回原点的最短路径可以看成从原点出发经过 \(\frac{k}{2}\) 条边之后的最短路径(这样一来也没有了终点的限制)
3.这里用到了见微知著的思维,即假设已知某点经过 \([1,k_1]\) 条边之后的最短路径,那么其经过 \(k_1+1\) 条边之后的最短路径等于它周围四个点经过 \(k_1\) 条边的最短路径长度+相邻边长

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

struct edge {
    int to, val;
};

vector<edge> G[250005];

int dis[250005][23]={0};

void solve() {
    int n, m, k;
    cin >> n >> m >> k;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < m; j++) {
            int v;
            cin >> v;
            int x = (i - 1) * m + j, y = x + 1;
            G[x].push_back({y, v});
            G[y].push_back({x, v});
        }
    }

    for (int i = 1; i < n; i++) {
        for (int j = 1; j <= m; j++) {
            int v;
            cin >> v;
            int x = (i - 1) * m + j, y = x + m;
            G[x].push_back({y, v});
            G[y].push_back({x, v});
        }
    }

    if(k&1)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cout<<-1<<' ';
            }
            cout<<'\n';
        }
        return;
    }
    for(int i=1;i<=k;i++)
    {
        for (int x = 1; x <= n; x++)
            for (int y = 1; y <= m; y++)
            {
                int now=(x-1)*m+y;
                dis[now][i]=2e9;
                for(auto next:G[now])
                {
                    int to=next.to,val=next.val;
                    dis[now][i]=min(dis[now][i],dis[to][i-1]+val);
                }
            }
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            int now=(i-1)*m+j;
            cout<<2*dis[now][k/2]<<' ';
        }
        cout<<'\n';
    }
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t = 1;

    while (t--) solve();
    return 0;
}

标签:经过,Explorer,Space,int,路径,back,push,条边
From: https://www.cnblogs.com/pure4knowledge/p/18301381

相关文章

  • [namespace hdk] 向量 direct_vector
    我忏悔我有罪我心情又不好了不知道干什么所以又不小心封了个东西啊啊啊啊啊啊啊啊功能已重载[]运算符(右值)谁能教教我怎么把[]变成stl类似的左值表达式(直接返回地址需要在前面加*,挺麻烦的)已重载=运算符(可使用向量或std:::vector)已重载++=--=-(负号)*(点乘)*=(......
  • [namespace hdk] Balanced_tree 整合
    代码#include<bits/stdc++.h>usingnamespacestd;namespacehdk{ namespacebalanced_tree{ constintN=2000001,inf=114514191; classsplay{ private: introot,tot; structtree{ intw; intcnt,size; intfa,son[2]; }t[N];......
  • 如何删除顽疾Terminating状态的namespace
    删除Terminating状态的namespace  话不多说,开整获取nskubectlgetnsNAMESTATUSAGEarms-promActive16dcattle-impersonation-systemTerminating13ddefaultActive......
  • C++ 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)
    这里函数采用两个参数n和k,并返回二项式系数C(n,k)的值。 例子: 输入:n=4和k=2输出:6解释:4C2等于4!/(2!*2!)=6输入:n=5和k=2输出:10解释:5C2等于5!/(3!*2!)=10        在本文中,我们讨论了O(n*k)时间和O(k)额外空间算法。C(n,......
  • Java 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)
    这里函数采用两个参数n和k,并返回二项式系数C(n,k)的值。 例子: 输入:n=4和k=2输出:6解释:4C2等于4!/(2!*2!)=6输入:n=5和k=2输出:10解释:5C2等于5!/(3!*2!)=10        在本文中,我们讨论了O(n*k)时间和O(k)额外空间算法。C(n,......
  • qt 入门常用类理解(涉及QMessageBox,Layout,Spacers,Splitter,Buuddy,LoginApp,QFile,
    1.QMessageBoxQMessageBox::Yes QApplication::quit();QMessageBox::exec用于在模态(阻塞式)对话框中显示一个消息框,并等待用户的响应。这个函数通常用于在应用程序中显示消息、警告或询问对话框,并等待用户采取适当的操作后继续执行。int QMessageBox::exec()exec 函数没有......
  • [namespace hdk] ordered_vector
    功能:已重载[]运算符已重载构造函数clear()it()以std::vector形式返回自身print(char='',char='\n')输出,第一个参数为分隔符,第二个参数为结束符count(x)查找x的出现次数find(x)判断x是否出现,是返回1,否则返回0empty()判断当前是否为空size()返回当前元素个数lower......
  • OpenSpace Web3课程大纲
    这个OpenSpaceWeb3BootCamp区块链技术线下集训营培训的内容看起来不错,比较全面也比较深入,但我没有金钱和时间,而且似乎这个面向的应该是即将毕业的应届生,2个月脱产应该没多少工作的人参加,除了一些处于gap期的吧。年轻真好。不管怎样,在这里列一下这个培训的大纲,作为参考。夯实基......
  • Gradle Core Plugins (plugin is not in ‘org.gradle‘ namespace)
    记录一个由gradle构建项目遇到的问题:起因:项目原先运行正常,不过个人移动了工程的目录位置,导致出现以下错误GradleCorePlugins(pluginisnotin'org.gradle'namespace)-PluginRepositories(couldnotresolvepluginartifact'com.android.application:com.androi......
  • 【译】VisualStudio.Extensibility 17.10:用 Diagnostics Explorer 调试您的扩展
    想象一下,创建的扩展比以往任何时候都运行得更快、更流畅!如果您最近还没有跟上,我们一直在努力改进VisualStudio.ExtensibilitySDK。VisualStudio.Extensibility帮助您构建在主IDE进程之外运行的扩展,以提高性能和可靠性。它还提供了一个时尚而直观的基于.NET8的API......