社区讨论

萌新求助,,wa4个点

P1186玛丽卡参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi7ysew9
此快照首次捕获于
2025/11/21 05:49
4 个月前
此快照最后确认于
2025/11/21 05:49
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#define int long long
using namespace std;
const int N=1000005;
int pre[1005];
int cnt;
struct{
	int to;
	int from;
}s[1005];
int ans[1005];
int n,m,cnl;
int fina_ans;
vector< pair<int,int> > va[N<<1];
bool done[1005];
int dist[1005];
void print(int now)
{
	if(pre[now])
	{
		ans[++cnt]=now;
		print(pre[now]);
	}
}
void spfa(int limt)
{
	queue<int>v;
	memset(done,0,sizeof(done));
	for(int i=1;i<=n;i++)
	dist[i]=1e8;
	dist[1]=0;
	 v.push(1);
	 while(v.size())
	 {
	 	int front=v.front();
	 	v.pop();
	 	done[front]=1;
	 	for(int i=0;i<va[front].size();i++)
	 	{
	 		int to=va[front][i].first;
	 		int dis=va[front][i].second;
	 		if(front==s[limt].from&&to==s[limt].to)
	 		continue;
	 		if(dist[to]>dist[front]+dis)
	 		{
	 		
	 			dist[to]=dist[front]+dis;
	 			if(!done[to])
	 			{
	 				v.push(to);
	 				pre[to]=front;
	 			}
	 		}
	 	}
	 }
	 fina_ans=max(fina_ans,dist[n]);
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int a,b,v;
		cin>>a>>b>>v;
		va[a].push_back(make_pair(b,v));
		va[b].push_back(make_pair(a,v));
	}
	spfa(0);
	print(n);
	ans[++cnt]=1;
	for(int i=cnt;i>=2;i--)
	{
		s[++cnl].from=ans[i];
		s[cnl].to=ans[i-1];
	}
	for(int i=1;i<=cnl;i++)
	spfa(i);
	cout<<fina_ans;
} 
萌新求助

回复

2 条回复,欢迎继续交流。

正在加载回复...