WA三个点
  • 板块P1342 请柬
  • 楼主hard_learn
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/30 08:59
  • 上次更新2024/8/30 12:51:27
查看原帖
WA三个点
1053119
hard_learn楼主2024/8/30 08:59
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans=0;
struct st{
	int c,step;
};
struct node{
	int id,x;
	bool operator <(const node&h)const{
		return x<h.x;
	}
};
vector<st>sum[1000006],cnt[1000006];
int dis[1000006];
bool flag[1000006];
void dij(int x){
	priority_queue<node>q;
	for(int i=1;i<=n;i++){
		dis[i]=INT_MAX;
		flag[i]=0;
	}
	dis[x]=0;
	flag[x]=1;
	q.push((node){x,0});
	while(q.empty()==0){
		int now=q.top().id;
		q.pop();
		for(int i=0;i<sum[now].size();i++){
			int tt=sum[now][i].step,id=sum[now][i].c;
			if(dis[id]>dis[now]+tt){
				dis[id]=dis[now]+tt;
				if(flag[id]==0){
					flag[id]=1;
					q.push((node){id,dis[id]});
				}
			}
		}
	}
} 
void dijs(int x){
	priority_queue<node>q;
	for(int i=1;i<=n;i++){
		dis[i]=INT_MAX;
		flag[i]=0;
	}
	dis[x]=0;
	flag[x]=1;
	q.push((node){x,0});
	while(q.empty()==0){
		int now=q.top().id;
		q.pop();
		for(int i=0;i<cnt[now].size();i++){
			int tt=cnt[now][i].step,id=cnt[now][i].c;
			if(dis[id]>dis[now]+tt){
				dis[id]=dis[now]+tt;
				if(flag[id]==0){
					flag[id]=1;
					q.push((node){id,dis[id]});
				}
			}
		}
	}
} 
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		sum[u].push_back((st){v,w});
		cnt[v].push_back((st){u,w});
	}
	dij(1);
	for(int i=1;i<=n;i++){
		ans+=dis[i];
	}
	dijs(1);
	for(int i=1;i<=n;i++){
		ans+=dis[i];
	}
	cout<<ans<<endl; 
	return 0;
}
2024/8/30 08:59
加载中...