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].

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springbean生命周期通俗一点_spring为啥是单例模式

    springbean生命周期通俗一点_spring为啥是单例模式一、Spring核心模块介绍1.SpringCore:Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。2.SpringContext:构建于Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N).

    2022年9月18日
    5
  • pycharm中文语言包下载不了_pycharm基本使用方法

    pycharm中文语言包下载不了_pycharm基本使用方法本文为原文转载PyCharmproforMac(编程开发软件)​www.mac69.com安装完成后运行,进行基本的配置后会弹出激活窗口,选择「Evaluateforfree」,然后点击「Evaluate」按钮。PyCharmproforMac(编程开发软件)安装完成后运行,进行基本的配置后会弹出激活窗口,选择「Evaluateforfree」,然后点击「Evaluate」按钮…

    2022年8月29日
    2
  • maven打包时打包指定的lib文件夹

    maven打包时打包指定的lib文件夹今天在打包自己的springboot项目时遇到了问题,报找不到类和符号。因为我有些依赖是放在项目lib文件夹中,那么打包的时候要连把它一起打包。修改pom.xml,添加一下内容:<build><plugins><plugin><groupId>or…

    2022年5月29日
    39
  • mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法「建议收藏」

    mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法「建议收藏」MySQL可应用于多种语言,包括PERL,C,C++,JAVA和PHP。在这些语言中,MySQL在PHP的web开发中是应用最广泛。大家知道mysql如何分区的吗?下面由学习啦小编为大家整理的mysql分区的方法,希望大家喜欢!mysql分区的方法一、概述当MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性能下降>的比率不一而同…

    2022年5月31日
    38
  • mac phpstrom激活码2021(JetBrains全家桶)

    (mac phpstrom激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    62
  • 自定义bt服务器,[教程]Aria2自动更新BT Tracker服务器列表的方法[通俗易懂]

    自定义bt服务器,[教程]Aria2自动更新BT Tracker服务器列表的方法[通俗易懂]说明公开的BTtracker服务器,因为种种原因总会经常失效,要想获取更多的peer需要经常维护这份列表。感谢github上的小伙伴提供了这么一份tracker自动更新列表:trackerslist。我们要想Aria2也支持自动更新这份列表,那么你可以按照下面方法来实现。方法此文仅适用于Centos系统,其它系统稍作变更即可。我没有使用过其它系统,这里也就不提供兼容性的脚本了。示例:Aria2安…

    2022年9月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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