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)


相关推荐

  • LR模型推导_索洛模型的简单推导

    LR模型推导_索洛模型的简单推导概念 逻辑回归假设数据服从伯努利分布,通过极大化似然函数方法,运用梯度下降来求解参数,来达到将数据二分目的 sigmoid函数 sigmoid函数:,y为正样本的概率,1-y为负样本的概率 LR模型推导 设 另 那么对应 极大似然估计 似然函数 对数似然函数就是 将代入公式 对参数求偏导 参数更新 …

    2022年10月13日
  • 基于MATLAB GUI的串口通信

    基于MATLAB GUI的串口通信之前学过单片机对于串口通信比较了解最近在学习MATLAB发现它还可以控制串口于是通过MATLAB的GUI创建了一个串口通信的小软件效果如下如果没有单片机或者其他硬件的话我们可以直接用软件模拟串口本人选择了ConfigureVirtualSerialPortDriver这个软件软件网上就有下一个使用几天就行了 选…

  • 前端优化带来的思考,浅谈前端工程化

    前端优化带来的思考,浅谈前端工程化

  • android之SeekBar和RatingBar

    今天在看一个音乐播放器的源代码时候用到了SeekBar,就翻出来mars老师的视频复习了一下,然后综合使用了一下.首先先看下运行效果:下来我们看看布局文件的设计:main.xml: 1 2

  • armv6 armv7 armv7s架构的区别[通俗易懂]

    armv6 armv7 armv7s架构的区别[通俗易懂]arm结构处理器,几乎所有的手机都基于arm,其在嵌入式系统中应用非常广泛。 ARM处理器因为低功耗和小尺寸而闻名,它的性能在同等功耗的产品中也很出色。这里我们注意一点,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。只有在目标设备上,才会执行设备对应的指令集。 ARMv6设备包括iPhone,iPhone2,iPhone3G以及第一代和第二代iPodTo

  • Qt各种颜色名称及CSS对照表「建议收藏」

    Qt各种颜色名称及CSS对照表「建议收藏」css颜色代码对照参见:https://blog.csdn.net/zy_heu/article/details/78952173

发表回复

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

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