使用vector存储地图
#include <bits/stdc++.h>
using namespace std;
int n, m, s, e;
int city[500];
typedef struct
{
int d;
int l;
} v;
vector<v> ve[500];
int short_len = 1e6;
int count_way = 0;
int max_team = 0;
int visit[500];
void dfs(int cur, int team, int len)
{
if (cur == e)
{
if (len == short_len)
{
count_way++;
max_team = max(max_team, team);
}
else if (len < short_len)
{
short_len = len;
count_way = 1;
max_team = team;
}
return;
}
for (auto vec : ve[cur])
{
if (visit[vec.d] == 0)
{
visit[vec.d] = 1;
dfs(vec.d, team + city[vec.d], len + vec.l);
visit[vec.d] = 0;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m >> s >> e;
for (int i = 0; i < n; i++)
{
cin >> city[i];
}
for (int i = 0; i < m; i++)
{
int a, b, l;
cin >> a >> b >> l;
v temp = {b, l};
v temp_1 = {a, l};
ve[a].push_back(temp);
ve[b].push_back(temp_1);
}
dfs(s, city[s], 0);
cout << count_way << " " << max_team;
}