当前位置: 首页 > news >正文

简单路径计数

E 简单路径计数 - 第七届校赛正式赛 —— 补题

题目大意:

给一个简单无向图,图中有 N N N 个顶点,编号为 1 − N 1-N 1N ,有 M M M 条边,编号为 1 − M 1-M 1M 。边 i i i 连接顶点 u i u_i ui v i v_i vi 。每个顶点的度数最多为 10 10 10

K K K 为从顶点 1 1 1 出发的简单路径(无重复顶点的路径)的数目,打印 m i n ( K , 1 0 6 ) min(K,10^6) min(K,106)

1 < = K < = 1 0 6 1<=K<=10^6 1<=K<=106

1 < = K < = m i n ( 1 0 3 , N ∗ ( N − 1 ) / 2 ) 1<=K<=min(10^3,N*(N-1)/2) 1<=K<=min(103,N(N1)/2)

1 < = u i , v i < = N 1<=u_i,v_i<=N 1<=ui,vi<=N

思路:

路径数最多 1 0 6 10^6 106 ,可以考虑搜索所有可行路径并进行剪枝

int ans=0,vis[N];
void dfs(int u){
    if(ans==1e6) return ;
    ans++;
    for(auto x:g[u]){
        if(vis[x]==0){
            vis[x]=1;
            dfs(x);
            vis[x]=0;//回溯路径
            if(ans==1e6) return ;
        }
    }
}

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define PII pair<int,int>
#define lowbit(x) x&-x
#define ALL(x) x.begin(),x.end()

const int mod = 1e9 + 7;
const int N = 2e5 + 10;


vector<int> g[N],vis(N);
int n,m,ans;

void dfs(int u) {
	if(ans==1e6) return ;
	ans++; 
	for(auto x:g[u]){
		if(vis[x]==0){
			vis[x]=1;
			dfs(x);
			vis[x]=0;
		}
		if(ans==1e6) return ;
	}
}

void solve() {
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	vis[1]=1;
	dfs(1);
	cout<<ans<<'\n';
}

signed main() {
	std::ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}
http://www.dtcms.com/a/107218.html

相关文章:

  • 深度解析Python与ActiveMQ的完美交互
  • CF580B Kefa and Company(滑动窗口)
  • Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
  • 尚语翻译图册翻译|专业图册翻译|北京专业翻译公司推荐|专业文件翻译报价
  • 开发体育赛事直播系统主播认证功能技术实现方案
  • 体重秤PCBA电路方案组成结构
  • 【CSS3】05-定位 + 修饰属性
  • XSS漏洞的分类解释和演示实验
  • dfs(基于BFS的dfs)力扣37.解数独力扣79.单词搜索力扣1219.黄金矿工力扣980.不同路径III
  • linux shell 删除空行(remove empty lines)
  • 12-leveldb优化读性能的方法
  • agent报告
  • Linux命令-inotifywait
  • 继承与组合
  • LlamaIndex实现RAG增强:融合检索(Fusion Retrieval)与混合检索(Hybrid Search)
  • [ 取证 ]取证学习,工具使用, 赛题复现
  • Day 6
  • 在Android中创建DialogFragment
  • 【光电集成电路技术】基于单片机的音乐梦幻灯与USB转接器设计,电子琴硬件组成及仿真电路实现
  • 【Java 优选算法】二分算法(下)
  • OpenGL进阶系列20 - OpenGL SuperBible - bindlesstex 例子学习
  • Flutter求助贴
  • 失效模式分析(FMEA)、控制计划(CP)、流程图(Flowchart)的无缝衔接与高效管理--全星FMEA软件系统
  • 《自然-方法》2024年度技术:空间蛋白质组学(spatial proteomics)
  • PyArrow 核心技术与应用:高效数据处理与跨生态集成实践
  • C语言常见3种排序
  • 利用vmware快速安装一个可以使用的centos7系统
  • QML弹窗
  • H(e^j\omega) H(\omega)
  • 计算机网络复习 吉林大学