样例输出这个5084576,求助
  • 板块P1342 请柬
  • 楼主阴语飞
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/2/18 09:31
  • 上次更新2023/10/28 08:17:38
查看原帖
样例输出这个5084576,求助
297103
阴语飞楼主2022/2/18 09:31
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
const int maxn=1e5 +7;
int dis[maxn];
int vis[maxn];
long long ans=0;
struct node
{
	int v,len;
};
vector<node> e[maxn];
void dijkstra1(int x)
{
	memset(dis,63,sizeof dis);
	priority_queue<pair<int ,int > > q;
	q.push(make_pair(0,x));
	dis[x]=0;
    //vis[x]=1;
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=0;i<e[u].size();i++)
		{
			int v=e[u][i].v;
			if(dis[v]>dis[u]+e[u][i].len)
			{
				dis[v]=dis[u]+e[u][i].len;
				q.push(make_pair(-dis[v],v));
			}
		}
	 } 
 } 
void dijkstra2(int x)//x=n
{
	memset(dis,63,sizeof dis);
	priority_queue<pair<int ,int > > q;
	q.push(make_pair(0,x));
	dis[x]=0;
	memset(vis,0,sizeof vis);
	vis[x]=1;
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])continue;
		//vis[u]=1;
		for(int i=0;i<e[u].size();i++)
		{
			int v=e[u][i].v;
			if(dis[v]>dis[u]+e[u][i].len)
			{
				dis[v]=dis[u]+e[u][i].len;
				
				q.push(make_pair(-dis[v],v));
				
			}
		}
	 } 
 } 


int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		e[a].push_back({b,c});//结构体加大括号 
	}
	dijkstra1(1);
	for(int i=1;i<=n;i++)
	{
		ans=ans+dis[i];
	}
	dijkstra2(n);
	for(int i=1;i<=n;i++)
	{
		ans=ans+dis[i];
		
	}
	printf("%d",&ans);
}
	

2022/2/18 09:31
加载中...