蒟蒻70pts求助!(悬赏一关)
查看原帖
蒟蒻70pts求助!(悬赏一关)
678447
CSPAK_Zhangxiuqi0011楼主2024/8/6 21:37

rt,WA on #7,#9,#10,蒟蒻求调QWQ!

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node {
	int to,dis;
};
vector<node>ve[50005],spve[50005];
int n,m,k,x,y,visit[50005],issp[50005],dis1[50005],dis2[50005],dis3[50005];
queue<int>q;
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	for(int i = 1; i<=k; i++) {
		int u;
		cin>>u;
		issp[u]++;
	}
	for(int i = 1; i<=m; i++) {
		int u,v,w;
		cin>>u>>v>>w;
		if(issp[u] || issp[v]) {
			spve[u].push_back({v,w});
			spve[v].push_back({v,w});
		} else {
			ve[u].push_back({v,w});
			ve[v].push_back({u,w});
		}
	}
	cin>>x>>y;
	memset(dis1,0x3f,sizeof(dis1));//看哈利到所有房间的最短路
	dis1[1] = 0;
	q.push(1);
	while(!q.empty()) {
		int h;
		h = q.front();
		q.pop();
		visit[h] = 0;
		int l;
		l = ve[h].size();
		for(int i = 0; i<l; i++) {
			if(dis1[ve[h][i].to]>dis1[h]+ve[h][i].dis) {
				dis1[ve[h][i].to] = dis1[h]+ve[h][i].dis;
				if(!visit[ve[h][i].to]) {
					visit[ve[h][i].to]++;
					q.push(ve[h][i].to);
				}
			}
		}
		l = spve[h].size();
		for(int i = 0; i<l; i++) {
			if(dis1[spve[h][i].to]>dis1[h]+spve[h][i].dis) {
				dis1[spve[h][i].to] = dis1[h]+spve[h][i].dis;
				if(!visit[spve[h][i].to]) {
					visit[spve[h][i].to]++;
					q.push(spve[h][i].to);
				}
			}
		}
	}
	memset(dis2,0x3f,sizeof(dis2));//看罗恩到所有房间的最短路
	dis2[1] = 0;
	q.push(1);
	while(!q.empty()) {
		int h;
		h = q.front();
		q.pop();
		visit[h] = 0;
		int l;
		l = ve[h].size();
		for(int i = 0; i<l; i++) {
			if(dis2[ve[h][i].to]>dis2[h]+ve[h][i].dis) {
				dis2[ve[h][i].to] = dis2[h]+ve[h][i].dis;
				if(!visit[ve[h][i].to]) {
					visit[ve[h][i].to]++;
					q.push(ve[h][i].to);
				}
			}
		}
	}
	memset(dis3,0x3f,sizeof(dis3));
	dis3[x] = 0;
	q.push(x);
	while(!q.empty()) {
		int h;
		h = q.front();
		q.pop();
		visit[h] = 0;
		int l;
		l = ve[h].size();
		for(int i = 0; i<l; i++) {
			if(dis3[ve[h][i].to]>dis3[h]+ve[h][i].dis) {
				dis3[ve[h][i].to] = dis3[h]+ve[h][i].dis;
				if(!visit[ve[h][i].to]) {
					visit[ve[h][i].to]++;
					q.push(ve[h][i].to);
				}
			}
		}
		l = spve[h].size();
		for(int i = 0; i<l; i++) {
			if(dis3[spve[h][i].to]>dis3[h]+spve[h][i].dis) {
				dis3[spve[h][i].to] = dis3[h]+spve[h][i].dis;
				if(!visit[spve[h][i].to]) {
					visit[spve[h][i].to]++;
					q.push(spve[h][i].to);
				}
			}
		}
	}
	cout<<min(min(dis1[x],dis1[y])+dis3[y],min(max(dis1[x],dis2[y]),max(dis2[x],dis1[y])))<<"\n";
	return 0;
}

2024/8/6 21:37
加载中...