求助
查看原帖
求助
1352390
fangyishen114514楼主2024/9/15 14:43

WA前三个

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f

int n,m;

struct node
{
	int to,w;
};

vector<node> head[114514];
vector<node> head1[114514];

bool operator<(const node a,const node b)
{
	return a.w>b.w;
}

priority_queue<node> q;
priority_queue<node> q1;

int dis[114514],ans;

bool vis[114514],vis1[114514];

void dijkstra(int start)
{
	int i,j,k,x,y;
	for(i=1;i<=n;i++)
	{
		dis[i]=INF;
		vis[i]=false;
	} 
	dis[start]=0;
	vis[start]=true;
	for(i=0;i<head[start].size();i++)
	{
		k=head[start][i].to;
		dis[k]=head[start][i].w;
		q.push({k,dis[k]});
	}
	node temp;
	while(!q.empty())
	{
		temp=q.top();
		q.pop();
		x=temp.to;
		if(vis[x]) continue;
		vis[x]=true;
		for(i=0;i<head[x].size();i++)
		{
			y=head[x][i].to;
			if(vis[y]) continue;
			if(dis[x]+head[x][i].w<dis[y])
			{
				dis[y]=dis[x]+head[x][i].w;
				q.push({y,dis[y]});
			}
		}
	}
}

void dijkstra1(int start)
{
	int i,j,k,x,y;
	for(i=1;i<=n;i++)
	{
		dis[i]=INF;
		vis[i]=false;
	} 
	dis[start]=0;
	vis[start]=true;
	for(i=0;i<head1[start].size();i++)
	{
		k=head1[start][i].to;
		dis[k]=head1[start][i].w;
		q1.push({k,dis[k]});
	}
	node temp;
	while(!q1.empty())
	{
		temp=q1.top();
		q1.pop();
		x=temp.to;
		if(vis[x]) continue;
		vis[x]=true;
		for(i=0;i<head1[x].size();i++)
		{
			y=head1[x][i].to;
			if(vis[y]) continue;
			if(dis[x]+head1[x][i].w<dis[y])
			{
				dis[y]=dis[x]+head1[x][i].w;
				q1.push({y,dis[y]});
			}
		}
	}
}

int main()
{
	int i,j,k,ans;
	cin>>n>>m;
	for(i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		head[u].push_back({v,w});
		head1[v].push_back({u,w});
	}
	dijkstra(1);
	for(i=2;i<=n;i++) ans+=dis[i];
	dijkstra1(1);
	for(i=2;i<=n;i++) ans+=dis[i];
	cout<<ans-1;
	return 0;
}
2024/9/15 14:43
加载中...