球条
查看原帖
球条
549131
Eous楼主2024/8/20 10:45

过不了样例

#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;
int const maxn=5005;
int n,r,ans=INT_MAX;
int dis[maxn][2];
bitset<maxn>vis[2];
vector<pii>g[maxn];
priority_queue<pii,vector<pii>,greater<pii> >q;
void dij(int op)
{
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[op][u])
			continue;
		vis[op][u]=1;
		for(auto i:g[u])
		{
			if(dis[i.second][op]>dis[u][op]+i.first)
			{
				dis[i.second][op]=dis[u][op]+i.first;
				q.push({dis[i.second][op],i.second});
			}
		}
	}
}
signed main()
{
	scanf("%d%d",&n,&r);
	while(r--)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		g[u].push_back({w,v});
		g[v].push_back({w,u});
	}
	memset(dis,0x3f,sizeof dis);
	dis[1][0]=0;
	q.push({0,1});
	dij(0);
	dis[n][1]=0;
	q.push({0,n});
	dij(1);
	for(int i=1;i<=n;i++)
	{
		if(dis[i][0]+dis[i][1]==dis[n][0])
		    continue;
		ans=min(ans,dis[i][0]+dis[i][1]);
		// printf("%d %d\n",dis[i][0],dis[i][1]);
	}
	printf("%d",ans);
	return 0;
}
//致敬传奇耐骑王Leo(uid:905636)
//他的吧唧生锈了hhhhhhh
2024/8/20 10:45
加载中...