WA 55pts求调
查看原帖
WA 55pts求调
551430
__O__o__楼主2024/8/1 09:56
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define inf 1e9
int n,m,k,s,t;
vector<pair<int,int> > G[500005];
int dis[500005];
bool vis[500005];
void dij(int s)
{
	for (int i=0;i<=n;i++) dis[i] = inf;
    memset(vis,0,sizeof(vis));
    dis[s]=0;
    priority_queue<pair<int, int>,vector<pair<int, int> >,greater<pair<int, int> > > q;
    q.push(make_pair(0, s));
    while(!q.empty()) 
	{
        int pos=q.top().second;
        q.pop();
        if (vis[pos]==true)
            continue;
        vis[pos]=true;
        for(int i=0;i<G[pos].size();i++) 
		{
            int v=G[pos][i].first;
            if (dis[v]>dis[pos]+G[pos][i].second) 
			{
                dis[v]=dis[pos]+G[pos][i].second;
                q.push(make_pair(dis[v], v));
            }
        }
    }
}
int main()
{
	cin>>n>>m>>k>>s>>t;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		G[u].push_back(make_pair(v,w));
		G[v].push_back(make_pair(u,w));
		for(int j=1;j<=k;j++)
		{
			G[u+(j-1)*n].push_back(make_pair(v+j*n,0));
			G[v+(j-1)*n].push_back(make_pair(u+j*n,0));
			G[u+j*n].push_back(make_pair(v+j*n,w));
		    G[v+j*n].push_back(make_pair(u+j*n,w));
		}
	}
	for(int i=1;i<=k;i++)
	{
		G[t+(i-1)*n].push_back(make_pair(t+i*n,0));
	}
	dij(s);
	printf("%d",dis[t+k*n]);
	return 0;
} 
2024/8/1 09:56
加载中...