求助,全T了
查看原帖
求助,全T了
664236
Pursuewind楼主2022/12/26 19:35

本人才5年级,只会使用DFS做题,但全T了,是递归有什么问题吗?

#include <bits/stdc++.h>
using namespace std;
struct node
{
	int id;
	long long w;
};
vector <node> tree[100005];
int n, m, s;
long long pre[100005];
bool flag[100005];
int min_(long long a, long long b)
{
	return a < b ? a : b;
}
void dfs(int now, int end_point, long long cost)
{
	if (now == end_point)
	{
		pre[end_point] = min_(pre[end_point], cost);
		return ;
	}
	for (int i = 0; i < tree[now].size(); i ++)
		if (!flag[tree[now][i].id])
		{
			flag[tree[now][i].id] = 1;
			dfs(tree[now][i].id, end_point, cost + tree[now][i].w);
			flag[tree[now][i].id] = 0;
		}
}
void addedge(int u, int v, long long w)
{
	tree[u].push_back({v, w});
}
bool cmp(node a, node b)
{
	return a.id < b.id;
}
int main()
{
	scanf("%d%d%d", &n, &m, &s);
	for (int i = 1; i <= n; i ++) pre[i] = 1e9;
	for (int i = 1; i <= m; i ++)
	{
		int u, v;
		long long w;
		scanf("%d%d%lld", &u, &v, &w);
		addedge(u, v, w);
	}
	for (int i = 1; i <= n; i ++) sort(tree[i].begin(), tree[i].end(), cmp);
	for (int i = 1; i <= n; i ++) dfs(s, i, 0);
	for (int i = 1; i <= n; i ++) printf("%lld ", pre[i]);
	return 0;
}
2022/12/26 19:35
加载中...