萌新代码求调(悬赏一个关注)
查看原帖
萌新代码求调(悬赏一个关注)
300847
3f3f49wqn1楼主2023/1/30 08:52

思路就是先确定范围转换为表达式,再用查分约束跑一遍spfa。

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=4e3+1;
int End[N],Last[N],Next[N],Len[N],e;
int x[N],y[N];
void addedge(int x,int y,int z)
{
	End[++e]=y;
	Next[e]=Last[x];
	Last[x]=e;
	Len[e]=z;
}
int dis[N],cnt[N];
bool vis[N];
queue < int > q;
bool spfa(int s)
{
	for(int i=1;i<=n;i++) dis[i]=1e9;
	dis[s]=0;
	for(int i=1;i<=n;i++)
	{
		q.push(i);
		vis[i]=true;
		cnt[i]++;
	}
	while(q.size())
	{
		int x=q.front();
		q.pop();
		vis[x]=false;
		for(int i=Last[x];i;i=Next[i])
		{
			int y=End[i];
			if(dis[y]>dis[x]+Len[i])
			{
				dis[y]=dis[x]+Len[i];
				if(!vis[y])
				{
					q.push(y);
					vis[y]=true;
					cnt[y]++;
					if(cnt[y]>n+1)
					    return false;
				}
			}
		}
	}
	return true;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x[i]>>y[i];
		
		addedge(y[i],x[i],-1);
		addedge(x[i],y[i],9);
	}
	if(spfa(1))
	{
		cout<<n<<' '<<m<<'\n';
		for(int i=1;i<=n;i++)
		    cout<<x[i]<<' '<<y[i]<<' '<<dis[i]<<'\n'; 
	}
	else puts("-1");
	return 0;
}

对不起,给大家添麻烦了

2023/1/30 08:52
加载中...