91 wa on #2
查看原帖
91 wa on #2
333834
李柯欣楼主2022/9/29 22:43

RT,代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<vector>
#include<bitset>
#include<string>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>
#define int long long
using namespace std;
int ans=0x7fffffffffffff;
int n,p,k;
vector<int> g[100001],q[100001];
int sh[100001][101];
bool vis[100001][101];
int S,T;
void DP(){
	memset(sh,0x3f,sizeof(sh));
	memset(vis,0,sizeof(vis));
	sh[S][0]=0;
	vis[S][0]=1;
	priority_queue<pair<int,pair<int,int> > > qmr;
	for(int i=0;i<g[S].size();i++){
		qmr.push(make_pair(-q[S][i],make_pair(g[S][i],0)));
		qmr.push(make_pair(0,make_pair(g[S][i],1)));
		sh[g[S][i]][0]=(q[S][i]);
		sh[g[S][i]][1]=0;
	}
	while(qmr.size()){
		int now=qmr.top().second.first;
		int ooo=qmr.top().second.second;
		qmr.pop();
		if(vis[now][ooo]) continue;
		vis[now][ooo]=1;
		for(int i=0;i<g[now].size();i++){
			if(vis[g[now][i]][ooo]) continue;
			if(sh[now][ooo]+(q[now][i])<sh[g[now][i]][ooo]){
				sh[g[now][i]][ooo]=sh[now][ooo]+(q[now][i]);
				qmr.push(make_pair(-sh[g[now][i]][ooo],make_pair(g[now][i],ooo)));
			}
		}
		if(ooo+1<=k)
			for(int i=0;i<g[now].size();i++){
				if(vis[g[now][i]][ooo+1]) continue;
				if(sh[now][ooo]<sh[g[now][i]][ooo+1]){
					sh[g[now][i]][ooo+1]=sh[now][ooo];
					qmr.push(make_pair(-sh[g[now][i]][ooo+1],make_pair(g[now][i],ooo+1)));
				}
			}
	}
}
signed main(){
	cin>>n>>p>>k;
	cin>>S>>T;
	S++;
	T++;
	for(int i=1;i<=p;i++){
		int x,y,z;
		cin>>x>>y>>z;
		x++;
		y++;
		g[x].push_back(y);
		g[y].push_back(x);
		q[x].push_back(z);
		q[y].push_back(z);
	}
	DP();
	for(int i=0;i<=k;i++){
		ans=min(ans,sh[T][i]);
	}
	cout<<ans;
	return 0;
}

看了几遍讨论区发现好像只有我一个人卡在了 #2。

估计又是什么奇怪的错误吧。

2022/9/29 22:43
加载中...