分层图为什么被HACK
  • 板块灌水区
  • 楼主Martlet
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/6 17:13
  • 上次更新2024/8/6 18:21:04
查看原帖
分层图为什么被HACK
543717
Martlet楼主2024/8/6 17:13

飞行路线

95pt 最后一个测试的挂了,答案是0

#include<bits/stdc++.h>
using namespace std;
struct ede{
	int v,w;
};
struct kkk{
	int u,k,w;
	bool operator < (const kkk a)const{
		return w > a.w;
	}
};
vector<ede> g[100210];
int dis[100010][22],K;
bool inq[100010][22];
void dijk(int s){
	priority_queue<kkk> q;
	memset(dis,0x3f,sizeof(dis));
	q.push(kkk{s,0,0});
	dis[s][0] = 0;
	while(!q.empty()){
		kkk U = q.top();
		q.pop();
		int u = U.u,k = U.k;
		if(k > K+1)continue;
		if(inq[u][k])continue;
		inq[u][k] = 1;
		for(ede vis:g[u]){
			int v = vis.v,w = vis.w;
			if(dis[v][k] > dis[u][k]+w){
				dis[v][k] =  dis[u][k]+w;
				if(!inq[v][k]){
					q.push(kkk{v,k,dis[v][k]});
				}
			}
			if(dis[v][k+1] > dis[u][k]){
				dis[v][k+1] = dis[u][k];
				if(!inq[v][k+1]){
					q.push(kkk{v,k+1,dis[v][k+1]});
				}
			}
		}
	}
}
int n,m;
int s,t;
int main(){
	cin>>n>>m>>K;
	cin>>s>>t;
	for(int i = 1;i <= m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
		g[v].push_back({u,w});
	}
	dijk(s);
	int ans = 1e9+1;
	for(int i = 0;i <= K;i++){
		ans = min(ans,dis[t][K]);
	}
	cout<<ans;
	return 0;
} 
2024/8/6 17:13
加载中...