hdu 4109 dfs+剪枝优化

来源:互联网 发布:淘宝商家怎么改头像 编辑:程序博客网 时间:2024/06/06 19:37

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

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\n", ans);}return 0;}


0 0
原创粉丝点击