zoukankan      html  css  js  c++  java
  • hdu 4109 dfs+剪枝优化

    求最久时间即在无环有向图里求最远路径

    dfs+剪枝优化


    从0节点(自己添加的)出发,0到1~n个节点之间的距离为1。mt[i]表示从0点到第i个节点眼下所得的最长路径


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    const int maxn = 1005;
    int map[maxn][maxn];
    int mt[maxn];
    int N, M, ans;
    
    void init()
    {
    	memset(map, 0, sizeof(map));
    	memset(mt, 0, sizeof(mt));
    	for(int i = 0; i <= N; i ++)
    		map[0][i] = 1;
    }
    
    void dfs(int rt, int time)
    {
    	for(int i = 1; i <= N; i ++)
    	{
    		if(map[rt][i] != 0 && time+map[rt][i] > mt[i]) // 剪枝优化部分 
    		{
    			mt[i] = time+map[rt][i]; //  mt[i]表示进行完第i个节点所须要的眼下最久时间 
    			ans = max(ans, mt[i]);
    			dfs(i, mt[i]);
    		}
    	}
    }
    
    int main()
    {
    	int a, b, c;
    	while(scanf("%d%d", &N, &M) != EOF)
    	{
    		init();
    		for(int i = 0; i < M; i ++)
    		{
    			scanf("%d%d%d", &a, &b, &c);
    			a ++; b ++;
    			map[a][b] = c;
    		}
    		ans = 0;
    		dfs(0, 0);
    		printf("%d
    ", ans);
    	}
    	
    	return 0;
    }


  • 相关阅读:
    spring retry注解
    安装mongodb并配置
    spring boot Hello World
    Linux命令echo
    Linux vi命令
    查看linux是ubuntu还是centos
    Linux系统时间, 硬件BIOS时间的校准与同步
    MySQL优化查询 5.7版本
    战略由谁来制定
    VS2015快捷键
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6816760.html
Copyright © 2011-2022 走看看