求hack
查看原帖
求hack
601747
xibaohe楼主2023/10/9 18:36

record

写的是暴搜,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;
}


2023/10/9 18:36
加载中...