萌新刚学OI 10^-114514 s WAon#1求条
  • 板块P2648 赚钱
  • 楼主__crz_qaq__
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/18 19:58
  • 上次更新2024/8/18 20:04:08
查看原帖
萌新刚学OI 10^-114514 s WAon#1求条
1037614
__crz_qaq__楼主2024/8/18 19:58
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=305;
int n,m1,m2,K;	
vector<pair<int,int> >edge[N];
int dis[N],neg[N];
bool inq[N];
bool spfa(int s)
{
	memset(dis,0xcf,sizeof dis);
	memset(inq,0,sizeof inq);
	memset(neg,0,sizeof neg);
	queue<int>q;
	q.emplace(s);
	inq[s]=1;
	dis[s]=0;
	while(!q.empty())
	{
		int u=q.front();q.pop();
		inq[u]=0;
		for(auto &[v,w]:edge[u])
		{
			if(dis[u]+w>dis[v])
			{
				dis[v]=dis[u]+w;
				neg[v]=neg[u]+1;
				if(neg[v]>=n)
					return 1;
				if(!inq[v])
				{
					q.emplace(v);
					inq[v]=1;
				}
			}
		}
	}
	return 0;
}
signed main()
{
	cin>>K>>m1>>n>>m2;
	for(int i=1;i<=m1;++i)
	{
		int u,v;
		cin>>u>>v;
		edge[u].emplace_back(v,K);
	}
	for(int i=1;i<=m2;++i)
	{
		int u,v,w;
		cin>>u>>v>>w;
		edge[u].emplace_back(v,K-w);
	}
	for(int i=1;i<=n;++i)
		edge[0].emplace_back(i,K);
	if(spfa(0))
		cout<<"orz";
	else
	{
		int ans=0;
		for(int i=1;i<=n;++i)
			ans=max(ans,dis[i]);
		cout<<ans;
	}
}
2024/8/18 19:58
加载中...