求助,90分,最后一个测试点始终过不了
查看原帖
求助,90分,最后一个测试点始终过不了
333508
TNTEnter楼主2021/8/21 18:08
#include<iostream>
#include<queue>
using namespace std;
int g[1005][1005]={};
struct asdf
{
	int s;
	int t;
	int v;
};
int cnt;
int h[100005]={};
int M[100005]={};
int f[100005]={};
int n,m,c,x,y;

int an;
queue<asdf> q;
int bfs()
{ 
	q.push((asdf){1,0,0});
	for(int i=1;i<=n;i=i+1)
	{
		f[i]=-0x7fffffff; 
	}
	while(!q.empty())
	{
		asdf u=q.front();
		for(int i=1;i<=n;i=i+1)
		{
			if(g[u.s][i]&&u.v+M[i]-c*(u.t+1)*(u.t+1)>f[i]) {q.push((asdf){i,u.t+1,u.v+M[i]});f[i]=u.v+M[i]-c*(u.t+1)*(u.t+1);}
		}
		
		if(q.front().s==1)
		{
			if(q.front().v-c*q.front().t*q.front().t<=an)
			{
				break;
			}else
			{
				an=q.front().v-c*q.front().t*q.front().t;
			}
		}q.pop(); 
	}
}

int main()
{
	
	cin>>n>>m>>c;
	for(int i=1;i<=n;i=i+1) {cin>>M[i];}
	for(int i=1;i<=m;i=i+1) {cin>>x>>y;g[x][y]=1;}
	bfs();
	if(an<=0)
	{
		cout<<0;
	}else
	{
		cout<<an;
	}
	
	return 0;
}
2021/8/21 18:08
加载中...