堆优dijk板子 WA70求调
查看原帖
堆优dijk板子 WA70求调
217743
sc84bbs楼主2021/11/10 23:00

如题

	#include<bits/stdc++.h>
	using namespace std;
	#define int long long
	int n,m,cnt=1,head[1000005],ans[1000005];
	int s;
	struct edge{
		int to,w,next;
	}mapp[1000005];
	void addedge(int a,int b,int c){
		mapp[cnt].next=head[a];
		mapp[cnt].to=b;
		mapp[cnt].w=c;
		head[a]=cnt;
		cnt++;
	}
	bool view[1000005];
	priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
	void dijk(){
		while(!q.empty()){
			pair<int,int> qwq=q.top();
			q.pop();
			//cout<<ans[s];
			view[qwq.second]=1;
		//	cout<<qwq.second<<" "<<qwq.first<<endl; 
			for(int i=head[qwq.second];i!=0;i=mapp[i].next){
		//		cout<<mapp[i].to<<" "<<mapp[i].w<<endl;
			
					if(mapp[i].w+ans[qwq.second]<ans[mapp[i].to]){
						
						
						ans[mapp[i].to]=mapp[i].w+ans[qwq.second];
						q.push(make_pair(ans[mapp[i].to],mapp[i].to));
						if(!view[mapp[i].to]){
							q.push(make_pair(ans[mapp[i].to],mapp[i].to));
						}
					}
				
			}
		}
	}
	signed main(){
	    //freopen(".in","r",stdin);
		//freopen(".out","w",stdout);
		scanf("%lld%lld%lld",&n,&m,&s);
		for(int i=0;i<=n;i++){
			ans[i]=2147483647;
		}
		ans[s]=0;
		for(int i=0;i<m;i++){
			int ar,w,e;
			scanf("%lld%lld%lld",&ar,&w,&e);
			addedge(ar,w,e);
			if(ar==s&&w!=s){
				ans[w]=e;
			
				
				q.push(make_pair(e,w));
			}
		}
		view[s]=1; 
		dijk();
		for(int i=1;i<=n;i++){
			printf("%lld ",ans[i]);
		}
		return 0;
	}
	

yysy我这份代码跑P4779T了仨点

2021/11/10 23:00
加载中...