分层图板子题求调!玄关!
查看原帖
分层图板子题求调!玄关!
947202
wangruize88楼主2025/8/3 15:31

一直RE on #3#4#6#7#8#9

#include <bits/stdc++.h>
using namespace std ;
int n , m , k , s , t , ans = 2e9 ;
vector <pair<int,int> > g[2200010] ;
void connect () {
	for ( int i = 1 ; i <= n ; i ++ ) {
		for ( auto no : g[i] ) {
			int x = no.second ;
			for ( int j = 0 ; j < k ; j ++ ) {
				g[i+j*n].push_back(make_pair(0,x+(j+1)*n)) ; 
			}
		}
	}
}
int dis[2200010] ;
bool vis[2200010] ;
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q ;
void Dijkstra () {
	memset(dis,127,sizeof dis);
	q.push(make_pair(0,s)) , dis[s] = 0 ;
	while ( q.size() ) {
		int x = q.top().second ;
		q.pop() ;
		if ( vis[x] ) continue ;
		for ( auto i : g[x] ) {
			int y = i.second , w = i.first ;
			if ( dis[y] > dis[x]+w ) {
				dis[y] = dis[x]+w ;
				q.push(make_pair(dis[y],y)) ;
			}
		}
		vis[x] = 1 ;
	}
}
signed main () {
    scanf("%d%d%d%d%d",&n,&m,&k,&s,&t) ;
	s++ , t++ ;
	for ( int i = 1 , u , v , w ; i <= m ; i ++ ) {
		scanf("%d%d%d",&u,&v,&w) ;
		u++,v++ ;
		for ( int j = 0 ; j <= k ; j ++ ) {
			g[u+n*j].push_back(make_pair(w,v+n*j)) ;
			g[v+n*j].push_back(make_pair(w,u+n*j)) ;
		}
	}
	connect() ;
	Dijkstra() ;
	for ( int i = 0 ; i <= k ; i ++ ) {
		ans = min(ans,dis[i*n+t]) ;
	}
	printf("%d",ans) ;
	return 0 ;
}
2025/8/3 15:31
加载中...