满江红求助,玄关
查看原帖
满江红求助,玄关
764773
AstaVenti_楼主2024/7/19 20:49
#include<bits/stdc++.h>
using namespace std;
int to[500005],val[500005],nxt[500005],h[500005],dis[100005][7],vis[100005],n,m,x,t,y,a[6],cnt=0,ans=2147483647;
/*
莫遣其苦,人已至暮;
身傍玉舟,时饮甘露;
转教新哀,漏错无数;
余心发其问,何为最短路?
名最短路者,一年寻亲度。
君在空调屋,尽日无寒暑。
不知原神悲,可暂将此住。 
簌簌键盘击落,隐隐游离侧目。
一台计算机中,俯仰人间今古! 
盖君已知最短路,当为底事何少苦。
君生可有几多苦?半籄秋词盈恨蠹。

*/
struct nd{
	int v,w;
	friend bool operator<(nd a,nd b){
		return a.w>b.w;
	}
}tmp;
priority_queue<nd>q;
void add(int a,int b,int c) {
	to[++cnt]=b,val[cnt]=c,nxt[cnt]=h[a],h[a]=cnt;
}
void Dk(int s) {
		int g;
		if(s==1)g=1;if(s==a[1])g=2;if(s==a[2])g=3;if(s==a[3])g=4;if(s==a[4])g=5;if(s=a[5])g==6;
		memset(vis,0,sizeof(vis));
		for(int i=0; i<=n; i++)dis[i][g]=2147483647;
		dis[s][g]=0;
		q.push((nd){s,0});
		while(!q.empty()) {
			int u=q.top().v;
			q.pop();
			if(!vis[u]){
				vis[u]=1;
				for(int i=h[u]; i; i=nxt[i]){
					if(dis[to[i]][g]>val[i]+dis[u][g]){
						dis[to[i]][g]=val[i]+dis[u][g];
						q.push((nd){to[i],dis[to[i]][g]});
					}
				}
			}
		}
}
int main() {
//	freopen("newyear.in","r",stdin);
//	freopen("newyear.out","w",stdout);
	cin>>n>>m>>a[1]>>a[2]>>a[3]>>a[4]>>a[5];
	for(int i=1; i<=m; i++) {
		cin>>x>>y>>t;
		add(x,y,t),add(y,x,t);
	}
	Dk(1),Dk(a[1]),Dk(a[2]),Dk(a[3]),Dk(a[4]),Dk(a[5]);
	for(int i1=1; i1<=5; i1++)
	for(int i2=1; i2<=5; i2++)
	for(int i3=1; i3<=5; i3++)
	for(int i4=1; i4<=5; i4++)
	for(int i5=1; i5<=5; i5++)
	if(i1!=i2&&i2!=i3&&i3!=i4&&i4!=i5&&i1!=i3&&i1!=i4&&i1!=i5&&i2!=i4&&i2!=i5&&i3!=i5){
		ans=min(ans,dis[a[i1]][1]+dis[a[i2]][i1]+dis[a[i3]][i2]+dis[a[i4]][i3]+dis[a[i5]][i4]);
	}
	cout<<ans;
}
2024/7/19 20:49
加载中...