比赛 寒假集训4 评测结果 AWWWWWWWWW
题目名称 回忆 最终得分 10
用户昵称 小福鑫 运行时间 0.076 s
代码语言 C++ 内存使用 3.91 MiB
提交时间 2026-02-28 11:29:51
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct E {int v,x,y;};
vector<E> e[1005];
int a[1005],n,m,s,c;
bool v[1005],b[1005];
priority_queue<pair<int,int> > qn;
vector<int> qp;
void ad(int,int,int,int);
void act(int V,int x,int y) {
	if(!b[V]) {
		b[V]=1;
		if(a[V]>=0)qp.push_back(V);
		else qn.push({a[V],V});
	}
	if(x)ad(x,y,0,0);
}
void ad(int u,int V,int x,int y){
	e[u].push_back({V,x,y});
	if(v[u])act(V,x,y);
}
void go(int u) {
	int sz=e[u].size();
	for(int i=0;i<sz;i++)act(e[u][i].v,e[u][i].x,e[u][i].y);
}
int main() {
    freopen("recall.in","r",stdin);
    freopen("recall.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>c>>n>>m>>s;
	for(int i=1; i<=n;++i)cin>>a[i];
	for(int i=0,u,V,x,y;i<m;++i) {
		cin>>u>>V>>x>>y;
		ad(u,V,x,y);
	}
	v[1]=1;
	s+=a[1];
	b[1]=1;
	if(s<0){
		cout<<-1;
		return 0;
	}
	go(1);
	while(1){
		while(!qp.empty()) {
			int u=qp.back();
			qp.pop_back();
			if(v[u])continue;
			v[u]=1;
			s+=a[u];
			go(u);
		}
		if(v[n]) {
			cout<<s;
			return 0;
		}
		if(qn.empty()) {
			cout<<-1;
			return 0;
		}
		pair<int,int> t=qn.top();
		qn.pop();
		int u=t.second;
		if(v[u])continue;
		if(s+a[u]<0) {
			cout<<-1;
			return 0;
		}
		v[u]=1;
		s+=a[u];
		go(u);
	}
}