85pts TLE&WA 求助
查看原帖
85pts TLE&WA 求助
755947
_FJqwq楼主2023/1/20 16:16

想知道为什么会 WA?

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,m,k;
ll w[N],maxx,ans=-1e18;
bool vis[N];
vector<int>v1[N],v2[N];
priority_queue<pair<int,int> >q;
void bfs(int x){
	memset(vis,0,sizeof vis);
	q=priority_queue<pair<int,int> >();
	q.push(make_pair(0,x));
	vis[x]=1;
	while(!q.empty()){
		int u=q.top().second,val=q.top().first;
		q.pop();
		for(int i=0;i<v1[u].size();i++)
			if(!vis[v1[u][i]]){
				vis[v1[u][i]]=1;
				if(val<=k)
					v2[x].push_back(v1[u][i]);
				if(val+1<=k)
					q.push(make_pair(val+1,v1[u][i]));
			}
	}
}
void dfs(int x,int len,ll val){
	if(val+(ll)maxx*(5ll-len)<ans)
		return ;
	if(len==5){
		for(int i=0;i<v2[x].size();i++)
			if(v2[x][i]==1){
				ans=max(ans,val);
				break;
			}
		vis[x]=0;
		return ;
	}
	for(int i=0;i<v2[x].size();i++)
		if(!vis[v2[x][i]]){
			vis[v2[x][i]]=1;
			dfs(v2[x][i],len+1,val+w[v2[x][i]]);
			vis[v2[x][i]]=0;
		}
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=2;i<=n;i++)
		scanf("%lld",&w[i]),maxx=max(maxx,w[i]);
	for(int i=1,x,y;i<=m;i++)
		scanf("%d%d",&x,&y),v1[x].push_back(y),v1[y].push_back(x);
	for(int i=1;i<=n;i++)
		bfs(i);
	memset(vis,0,sizeof vis);
	vis[1]=1;
	dfs(1,1,0);
	return printf("%lld\n",ans),0;
}
2023/1/20 16:16
加载中...