求助!dfs 加上了注释 只有46分
  • 板块P1807 最长路
  • 楼主niuge666
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/13 18:25
  • 上次更新2023/12/13 20:50:40
查看原帖
求助!dfs 加上了注释 只有46分
941753
niuge666楼主2023/12/13 18:25
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include <string>
#include<cmath>
#include<sstream>
#include<vector>
#include<map>
#include <stack>
#include<list>
#include <queue>
#include<unordered_map>
#include<bitset>

using namespace std;

const int N = 1510;

int n, m;
int e[N], ne[N], idx, h[N];

int res=-1;
bool st[N];
int d[N];

void add(int a, int b)//建立邻接表
{
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}

void dfs(int x)
{
	if (x == n)//递归终点
	{
		res = max(res, d[x]);
		d[x] = 0;
		return;
	}
	for (int i = h[x]; i != -1; i = ne[i])//遍历与x相连的所有节点
	{
		if (!st[e[i]])
		{
			st[e[i]] = true;
			d[e[i]] += d[x];
			dfs(e[i]);
			d[e[i]] -= d[x];//回溯
			st[e[i]] = false;//回溯
		}
	}
}

int main()
{
	memset(h, -1, sizeof h);
	cin >> n >> m;
	while (m--)
	{
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v);//加入图中:u->v
		if(w>d[u])
		d[u] = w;//将距离算在了起点上
	}
	dfs(1);
	cout << res;
	return 0;
}
2023/12/13 18:25
加载中...