首页 > 其他分享 >P1078 [NOIP2012 普及组] 文化之旅

P1078 [NOIP2012 普及组] 文化之旅

时间:2022-09-22 22:58:53浏览次数:51  
标签:剪枝 return NOIP2012 之旅 int tot maxn P1078 now

https://www.luogu.com.cn/problem/P1078


搜索,图论,剪枝,最短路
绿色题
思路一:搜索 1.输入,建边,用一个数组存储已经学习的文化, 2.搜索,以当前的点now去看能走到哪些边,然后对连上的点判断是否学过要去的点的文化,或要去的点排斥自己已经学过的文化的任意一种 3.剪枝方法一: 如果当前长度>=ans ,就直接return (这样还是会TLE掉一个点(92分))

 

 

4.剪枝方法二: 可以直接开一个数组存储从起点到图任意一点的最短路程,如果当前路程大于到当前点的最短路程就直接return (这样做可以拿满分)

 

 

#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,k,m,s,t,c[maxn],a[maxn][maxn],tot,cnt,whk[maxn],ans=1e9,p[maxn][maxn],flag2=0,ssum[maxn];
bool flag;
/*struct edge{
	int dis,to,next;
}e[maxn];
void add(int u,int v,int w)
{
	tot++;
	e[tot].next=head[u];
	e[tot].to=v;
	head[u]=tot;
}*/
void dfs(int now,int sum)
{   
    if(sum>=ssum[now])
    {
    	return;
	}
	ssum[now]=sum;
	if(now==t)
	{
		flag2=1;
		return;
	}
	
	for(int i=1; i<=n; i++)
	{
		if(p[now][i]>0)
		{
			flag=1;
			for(int j=1; j<=cnt; j++)
			{
				if(a[c[i]][whk[j]]==1) 
				{
					flag=0;
					break;
				}
			}
			if(flag==1)
			{
				whk[++cnt]=c[i];
				dfs(i,sum+p[now][i]);
				cnt--;
			}
		}
	}
		return;
}
int main()
{
	cin>>n>>k>>m>>s>>t;
	for(int i=1; i<=n; i++) ssum[i]=1e9;
	for(int i=1; i<=n; i++)
	{
		cin>>c[i];
	}
	for(int i=1; i<=k; i++)
	{
		for(int j=1; j<=k; j++)
		{
			cin>>a[i][j];
		}
		a[i][i]=1;
	}
	for(int i=1; i<=m; i++)
	{
			int u,v,d;
			cin>>u>>v>>d;
			if(p[u][v]==0||d<p[u][v]) p[u][v]=d;
			p[v][u]=d;
	}
	cnt=1; whk[cnt]=c[s];
	dfs(s,0);
	if(flag2==1)
	cout<<ssum[t]<<endl;
	else{
		cout<<-1<<endl;
	}
	return 0;
}

  

 

标签:剪枝,return,NOIP2012,之旅,int,tot,maxn,P1078,now
From: https://www.cnblogs.com/2elaina/p/16721127.html

相关文章

  • 我的Vue之旅、04 CSS媒体查询完全指南(Media Quires)
    什么是SCSSSass:SassBasics(sass-lang.com)SCSS是CSS的预处理器,它比常规CSS更强大。可以嵌套选择器,更好维护、管理代码。可以将各种值存储到变量中,方便复用。......
  • sept.22 [SHOI2002] 百事世界杯之旅
    portkey考虑期望转移\(E_i\)表示抽出\(i\)人的期望抽数状态转移\(E_{i+1}=E_i+\DeltaE\)想办法把\(\DeltaE\)求出来就行了,比如抽多少次才抽出新的那一个人ACcode#......
  • 云原生之旅 - 2)Docker 容器化你的应用
    前言上文中我们用Golang写了一个HTTPserver,本篇文章我们讲述如何容器化这个应用,为后续部署到kubernetes做准备。 关键词:Docker,Containerization,Golang,容器化,......
  • 我的设计模式之旅、14 模板方法模式
    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。思考总结思考问题多个类中包含许多相似代码,只是小部分代码不同。思考如何在保持算法结构完整的情况......
  • SRE 之旅——开始 SLO 实施(第 2 部分——SLO 和错误预算)
    SRE之旅——开始SLO实施(第2部分——SLO和错误预算)https://successive.cloud/sre-fundamentals-sla-slo-sli/先决条件:SRE之旅——开始SLO实施(第1部分——......
  • 云原生之旅 - 1)Golang 入门 简单 HTTP Server
    前言本人最近几年一直在学习并且实践云原生,也从测试转型到DevOps,公司的所有服务也从数据中心搬到云端,回顾过去几年学到的知识,觉得是时候总结一下了,所以准备以云原生为题材......
  • 我的设计模式之旅、13 适配器模式
    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。思考总结思考问题程序调用第三方库经常会遇到的问题?你可能根本没有程序库的源代码,从而无法对其进行......
  • 我的设计模式之旅、02 单例模式(第二次更新)
    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。思考总结什么是单例模式单例模式(SingletonPattern)属于创建型模式,它提供了一种创建对象的最佳方式。......
  • 我的设计模式之旅、12 原型模式
    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。思考总结思考问题如果没有原型模式,当我们复制复杂对象,在新建相同类的对象,遍历原始对象中的所有成员变......
  • 我的设计模式之旅、11 生成器(建造者)模式
    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。思考总结思考问题没有生成器模式的情况下在构建不同形式的复杂对象时的问题:如果为每种可能的对象都......