为什么会全WA啊!!!求大佬帮着看看~~
查看原帖
为什么会全WA啊!!!求大佬帮着看看~~
1028934
KarlScvell楼主2023/12/19 19:37
#include<bits/stdc++.h>
using namespace std;
#define N 100001
#define int long long
struct node{
	int nxt,to,dis;
}e[2*N];
int head[N];
int cnt;
void add_edge(int u,int v,int w){
	e[++cnt].nxt=head[u];
	e[cnt].to=v,e[cnt].dis=w;
	head[u]=cnt;
}
int n,m;
int re[7];
int dist[7][N],vis[N];
void dijkstra(int id,int s){
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
	memset(vis,0,sizeof vis);
	dist[id][s]=0;
	q.push(make_pair(0,s));
	while(q.size()){
		int p=q.top().second;
		q.pop();
		if(vis[p]) continue;
		vis[p]=1;
		for(int i=head[p];i;i=e[i].nxt){
			if(dist[id][e[i].to]>dist[id][p]+e[i].dis){
				dist[id][e[i].to]=dist[id][p]+e[i].dis;
				q.push(make_pair(e[i].dis,e[i].to));
			}
		}
	}
}
int viss[N];
int ans=0x3f3f3f3f;
void dfs(int last,int cost,int dep){
	if(cost>ans) return;
	if(dep==5){
		ans=min(ans,cost);
		return;
	}
	for(int i=1;i<=5;i++){
	
		if(!viss[i]){
			viss[i]=1;
			dfs(i,cost+dist[last][re[i]],dep+1);
			viss[i]=0;
		}
	}
	
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=5;i++) cin>>re[i];
	re[6]=1;
	memset(dist,0x3f3f3f3f,sizeof dist);
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add_edge(u,v,w);
		add_edge(v,u,w);
	}
	for(int i=1;i<=6;i++) dijkstra(i,re[i]);
	memset(viss,0,sizeof 0);
	dfs(6,0,0);
	cout<<ans<<endl;
	return 0;
}

谢谢了!

2023/12/19 19:37
加载中...