写的是暴搜,TLE正常,WA的点是怎么回事??样例123可过,4可能会T,求hack/求调(TLE不管,不WA即可),悬3关。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include<list>
#include<queue>
#include<deque>
#include<map>
using namespace std;
#define endl '\n'
#define int long long
int n,Q,k,v[200005],a,b,s,t;
bool vis[200005];
long long ans;
vector<int> g[200005];
void Ios()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cout.flags(ios::fixed);
cout.precision(6);
return;
}
void dfs(int now,long long tot,int step)
{
if(now==t)
{
tot+=v[now];
ans=min(ans,tot);
//cout<<tot<<endl<<endl<<endl;
return;
}
//if(tot>=ans) return;
for(int i=0;i<g[now].size();i++)
{
int u=g[now][i];
if(!vis[u])
{
if(step==k)
{
vis[u]=true;
//cout<<tot<<" "<<u<<endl;
dfs(u,tot+v[now],1);
}
else
{
vis[u]=true;
//cout<<tot<<" "<<u<<endl;
dfs(u,tot,step+1);
dfs(u,tot+v[now],1);
}
vis[u]=false;
}
}
}
signed main()
{
Ios();
cin>>n>>Q>>k;
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n-1;i++)
{
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
for(int i=1;i<=Q;i++)
{
memset(vis,0,sizeof(vis));
ans=0x3f3f3f3f3f3f3f3f;
cin>>s>>t;
vis[s]=true;
dfs(s,v[s],0);
cout<<ans<<endl;
}
return 0;
}