55分求救
查看原帖
55分求救
1346586
zzwdsj楼主2024/8/16 18:16
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,c;
vector<ll>v[1005];
ll f[1005],g[1005],t[1005];
bool flag[1001];
queue<ll>q;
int main()
{
	scanf("%lld%lld%lld",&n,&m,&c);
	memset(f,-0x3f,sizeof(f));
	fill(g,g+n+1,INT_MAX/c);
	for(int i=1;i<=n;i++)scanf("%lld",&t[i]);
	for(int i=1;i<=m;i++)
	{
		ll x,y;
		scanf("%lld%lld",&x,&y);
		v[x].push_back(y);
	}
	flag[1]=1;
	g[1]=0;
	f[1]=0;
	q.push(1);
	while(!q.empty())
	{
		ll h=q.front();
		flag[h]=0;
		q.pop();
		for(ll i:v[h])
		{
			if(f[h]+t[i]-c*(g[h]+1)*(g[h]+1)>f[i]-c*g[i]*g[i])
			{
				f[i]=f[h]+t[i];
				g[i]=g[h]+1;
				if(!flag[i])q.push(i),flag[i]=1;
			}
		}
	}
	cout<<max(0LL,f[1]-c*g[1]*g[1]);
	return 0;
}

原题

2024/8/16 18:16
加载中...