P4568 求教!!
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/31 09:32
  • 上次更新2024/7/31 11:06:33
查看原帖
P4568 求教!!
1390341
封禁用户楼主2024/7/31 09:32
#include<bits/stdc++.h>
#define int long long
const int MaxN = 8888888, MaxM =9999999;
using namespace std;
int n,m,s,u,l,tt,k,nums;
int vis[MaxN],h[MaxN],dis[MaxN];
struct edge{
	int t,w,nex;
}c[MaxM];
void cunchu(int a,int b,int v){
	c[++l].t=b;
	c[l].w=v;
	c[l].nex=h[a];
	h[a]=l;
}
inline void dijkstra(int s){
	memset(dis,0x3f,sizeof(dis));
	typedef pair<int,int>pii;
	priority_queue<pii,vector<pii>,greater<pii> > q;
	dis[s]=0;
	q.push(make_pair(0,s));
	while(!q.empty()){
		int u=q.top().second;
		q.pop();
		if(vis[u]){
			continue;
		}
		vis[u]=1;
		for(int i=h[u];i;i=c[i].nex){
			int v=c[i].t;
			if(dis[v]>dis[u]+c[i].w){
				dis[v]=dis[u]+c[i].w;
				q.push(make_pair(dis[v],v));
			}
		}
	}
}
signed main(){
	cin>>n>>m>>k>>s>>tt;
	s++;
	tt++;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		u++;
		v++;
		cunchu(u,v,w);
		cunchu(v,u,w);
		for(int j=0;j<=k;j++){
			cunchu(u+(j-1)*n,v+j*n,0);
			cunchu(v+(j-1)*n,u+j*n,0);
			cunchu(u+j*n,v+j*n,w);
			cunchu(v+j*n,u+j*n,w);
		}
	}
	for(int i=1;i<=k;i++){
		cunchu(tt+(i-1)*n,tt+i*n,0);
	}《--加的这坨循环在这里,原本没有的。
	dijkstra(s);
	cout<<dis[tt+k*n];
	return 0;
}

原本是九十分,加了:

for(int i=1;i<=k;i++){
	cunchu(tt+(i-1)*n,tt+i*n,0);
}

过后AC了,麻烦大佬解释一下为什么?

2024/7/31 09:32
加载中...