暴力基本全是WA,求助
查看原帖
暴力基本全是WA,求助
346868
Stone2007楼主2023/10/19 21:52

按理来说暴力应该只会有TLE来着,求大佬看看哪里错了

#include<bits/stdc++.h>
using namespace std;
int n,m,k,g[2505][2505];
long long ans,val[2505];
bool ss[2505][2505];
void bfs(int s)
{
	queue<int> q,qd;
	q.push(s);
	qd.push(0);
	bool vis[2505];
	memset(vis,0,sizeof(vis));
	while(!q.empty())
	{
		int u=q.front(),dis=qd.front();
		q.pop();
		qd.pop();
		if(vis[u]==true)
			continue;
		vis[u]=true;
		g[s][u]=min(g[s][u],dis);
		for(int i=1;i<=n;i++)
			if(ss[u][i]==true)
			{
				q.push(i);
				qd.push(dis+1);
			}
	}
}
void bbfs()
{
	queue<int> q,qt;
	queue<long long> qd;
	for(int i=1;i<=n;i++)
		if(g[1][i]<=k)
		{
			q.push(i);
			qd.push(val[i]);
			qt.push(1);
		}
	while(!q.empty())
	{
		int u=q.front(),t=qt.front();
		long long w=qd.front();
		q.pop();
		qd.pop();
		qt.pop();
		if(t==5&&u!=1)
			continue;
		if(t==5&&u==1)
			ans=max(ans,w);
		for(int i=1;i<=n&&i!=u;i++)
			if(g[u][i]<=k)
			{
				q.push(i);
				qd.push(w+val[i]);
				qt.push(t+1);
			}
	}
}
signed main()
{
	scanf("%d%d%d",&n,&m,&k);
	k++;
	for(int i=2;i<=n;i++)
		scanf("%lld",&val[i]);
	memset(g,0x3f,sizeof(g));
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		ss[u][v]=ss[v][u]=true;
	}
	for(int i=1;i<=n;i++)
		bfs(i);
	bbfs();
	printf("%lld",ans);
	return 0;
}

20分,全是WA

2023/10/19 21:52
加载中...