ural 1500 Pass Licenses --- 状态压缩dfs

2024-05-28 11:08

本文主要是介绍ural 1500 Pass Licenses --- 状态压缩dfs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这方法真好啊。。

有n个点,m条路,k个执照,每条路都属于一些执照(拥有指定执照才能走)

求从0走到1 最少需要哪些执照 


枚举 1到1<<k 二进制的每一位代表是否拥有该执照

对每一种组合dfs  取二进制中1最少的解咯


代码很简洁 但熟练运用二进制总是需要多多练习的事。。



#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
using namespace std;//mp[i][j]中为1的位表示,拥有该位的执照就可以走i到j这条路
int mp[35][35],vis[35],k,n,m,tmp,ans1[35],ans,tmp1[35];void dfs(int x,int now)
{vis[x]=1;if(x==1) return;for(int i=0;i<n;i++){if((now&mp[x][i])&&!vis[i])dfs(i,now);}
}int main()
{int i,v1,v2,c,now,cnt,j;while(~scanf("%d%d%d",&k,&n,&m)){memset(mp,0,sizeof mp);for(i=0;i<m;i++){scanf("%d%d%d",&v1,&v2,&c);mp[v1][v2]=((1<<c)|mp[v1][v2]);mp[v2][v1]=mp[v1][v2];}ans=inf;for(i=0;i<(1<<k);i++)//k种执照的每种组合尝试一遍{tmp=i;cnt=0;while(tmp)//必要的剪枝{if(tmp&1)cnt++;tmp>>=1;}if(cnt>=ans) continue;now=i;memset(vis,0,sizeof vis);dfs(0,now);// printf("vis1:%d i:%d\n",vis[1],i);if(vis[1])//能够走到1 则比较执照数量{ans=0;cnt=0;while(now){//    printf("tmp:%d cnt:%d\n",tmp,cnt);if(now&1){ans1[ans]=cnt;ans++;}now>>=1;cnt++;}}}printf("%d\n",ans);for(i=0;i<ans-1;i++)printf("%d ",ans1[i]);printf("%d\n",ans1[i]);}return 0;
}


这篇关于ural 1500 Pass Licenses --- 状态压缩dfs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010388

相关文章

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr