NOIP 2012 文化之旅 题解[通俗易懂]

NOIP 2012 文化之旅 题解[通俗易懂]来水一篇题解,我看洛谷上说的这道题的数据特别水,于是就写了很水的做法。题目:P1078[NOIP2012普及组]文化之旅-洛谷|计算机科学教育新生态(luogu.com.cn)题目背景本题是错题,后来被证明没有靠谱的多项式复杂度的做法。测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确。因此本题题目和数据仅供参考。题目描述有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

来水一篇题解,我看洛谷上说的这道题的数据特别水,于是就写了很水的做法。

题目:P1078 [NOIP2012 普及组] 文化之旅 – 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目背景

本题是错题,后来被证明没有靠谱的多项式复杂度的做法。测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确。因此本题题目和数据仅供参考。

题目描述

有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。

现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。

输入格式

第一行为五个整数 N,K,M,S,TN,K,M,S,T,每两个整数之间用一个空格隔开,依次代表国家个数(国家编号为11到 NN),文化种数(文化编号为11到KK),道路的条数,以及起点和终点的编号(保证 SS 不等于TT);

第二行为NN个整数,每两个整数之间用一个空格隔开,其中第 ii个数C_iCi​,表示国家ii的文化为C_iCi​。

接下来的 KK行,每行KK个整数,每两个整数之间用一个空格隔开,记第ii 行的第 j 个数为a_{ij}aij​,a_{ij}= 1aij​=1 表示文化 ii排斥外来文化jj(ii 等于jj时表示排斥相同文化的外来人),a_{ij}= 0aij​=0 表示不排斥(注意ii 排斥 jj 并不保证jj一定也排斥ii)。

接下来的 MM 行,每行三个整数 u,v,du,v,d,每两个整数之间用一个空格隔开,表示国家 uu与国家 vv有一条距离为dd的可双向通行的道路(保证uu不等于 vv,两个国家之间可能有多条道路)。

输出格式

一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出-1−1)。

输入输出样例

输入 #1

2 2 1 1 2 
1 2 
0 1 
1 0 
1 2 10 

输出 #1

-1

输入 #2

2 2 1 1 2 
1 2 
0 1 
0 0 
1 2 10 

输出 #2

10

说明/提示

输入输出样例说明11

由于到国家 22 必须要经过国家11,而国家22的文明却排斥国家 11 的文明,所以不可能到达国家 22。

输入输出样例说明22

路线为11 ->22

【数据范围】

对于 100%的数据,有2≤N≤1002≤N≤100

1≤K≤1001≤K≤100

1≤M≤N^21≤M≤N2

1≤k_i≤K1≤ki​≤K

1≤u, v≤N1≤u,v≤N

1≤d≤1000,S≠T,1≤S,T≤N1≤d≤1000,S=T,1≤S,T≤N

NOIP 2012 普及组 第四题

题解:既然数据很水那么我们就来试试爆搜行不行吧:

思路:对于每个将要去到的节点判断一下前面有没有与他相矛盾的节点或者是已经去过的节点。

因为每条边的大小是大于1的显然走环的话答案肯定不是最小的。

没每经过一个节点就用一个栈来存进去,记得要回溯哟。

code:

#include <bits/stdc++.h>
using namespace std;
struct node {
    int f,t,val,nex;
}rt[10010];
int head[10010],cnt,vis[1010][1010],qaq[10010];
int be,ed,a,b,c,lo[10010];
int bec;
void add(int x,int y,int z) {
    cnt ++;
    rt[cnt].f = x;
    rt[cnt].t = y;
    rt[cnt].val = z;
    rt[cnt].nex = head[x];
    head[x] = cnt;
}
int sta[1010];
int ans = 0x3f3f3f3f;
void dfs(int x,int num,int co) {
    if(clock() - bec > 999900) {
        if(ans == 0x3f3f3f3f)
            cout<<-1;
        else
            cout<<ans;
        exit(0);
    }
    if(x == ed){
        ans = min(ans,co);
    }
    else {
        for(int i = head[x];i;i = rt[i].nex) {
            bool faq = 1;
            for(int j = 1;j <= num;j ++) {
                if(qaq[rt[i].t])
                    faq = 0;
                if(vis[lo[rt[i].t]][lo[sta[j]]] || lo[rt[i].t] == lo[sta[j]])
                    faq = 0;
            }
            if(faq) {
                qaq[rt[i].t] = 1;
                sta[num + 1] = rt[i].t;
                dfs(rt[i].t,num + 1,co + rt[i].val);
                qaq[rt[i].t] = 0;
            }
        }
    }
}
int main() {
    bec = clock();
    cin>>a>>c>>b>>be>>ed;
    for(int i = 1;i <= a;i ++) {
        cin>>lo[i];
    }
    int x,y;
    for(int i = 1;i <= c;i ++) {
        for(int j = 1;j <= c;j ++) {
            cin>>x;
            vis[i][j] = x;
        }
    }
    int z;
    for(int i = 1;i <= b;i ++) {
        cin>>x>>y>>z;
        add(x,y,z);
        add(y,x,z);
    }
    qaq[be] = 1;
    sta[1] = be;
    dfs(be,1,0);
    if(ans == 0x3f3f3f3f)
        cout<<-1;
    else
        cout<<ans;
    return 0;
}
/*
10 5 18 1 7
4 2 5 3 2 2 1 2 3 2
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 2 656
2 4 989
2 1 947
3 2 731
4 10 830
4 8 688
5 6 573
5 3 492
6 10 700
6 3 854
8 7 839
8 7 461
10 9 885
10 9 960
4 7 4
3 4 8
2 3 4
1 2 5

 */

由于爆搜的话复杂度肯定过不去,所以在要超时的时候就可以输出了反正数据很水。[doge][doge][doge].

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172063.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • RSA加密算法简介[通俗易懂]

    RSA加密算法简介[通俗易懂]背景RSA加密算法是公钥密码最著名的算法之一,是由MIT三位(RonRivest,AdiShamir,LenAdleman)提出的,也就以三位的名字首字母命名。该算法的理论基础是“大数分解和素数检测“,如果说有一天,大数分解和素数检测的数学理论被证明可以简单解决,那么RSA算法的加密将没有任何意义。有提出说量子计算机的出现可以大大提高RSA的破解效率。下面我们将简单学习RSA加密算法的

  • linux 内网文件传输工具_局域网内文件传输工具 | nitroshare「建议收藏」

    linux 内网文件传输工具_局域网内文件传输工具 | nitroshare「建议收藏」学习计算机网络的朋友们都知道,网络的最重要的一个作用就是实现文件的一个共享,也许你会知道在同一网络上会有多种跨平台的文件共享工具,本文将要向大家介绍的是一款可以在Linux和Windows以及MacOS系统中跨平台的文件共享工具,Nitroshare,它是一款跨平台、开源的应用程序,可以在本地的网络中实现共享文件。NitroShare大大简化了本地网络的文件共享操作,一旦安装上,它就会与操作系统无…

  • Charles抓包神器

    Charles抓包神器Charles抓包神器Charles抓包过程插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接…

  • 常用的分布式事务解决方案有哪些_分布式事务redis解决方案

    常用的分布式事务解决方案有哪些_分布式事务redis解决方案首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校会员中心收藏动态消息创作中心常用的分布式事务解决方案凌澜星空2018-03-1114:44:5575315收藏466分类专栏:架构高性能网站微服务项目实战文章标签:微服务分布式架构事务一致性版权众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的…

    2022年10月26日
  • 深度学习图像标注工具汇总

    深度学习图像标注工具汇总对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。

  • [可能没有默认的字体]Warning: imagettfbbox() [function.imagettfbbox]: Invalid font filename……

    [可能没有默认的字体]Warning: imagettfbbox() [function.imagettfbbox]: Invalid font filename……

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号