求助,WA四个点???
查看原帖
求助,WA四个点???
752318
Liuyc07楼主2023/8/2 12:09
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define p pair<long long,int>
#define mp make_pair
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define rop(i,a,b) for(int i=(a);i<(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define por(i,a,b) for(int i=(a);i>(b);i--)
using namespace std;

const int N=1e6+10;

priority_queue<p,vector<p>,greater<p> > q;
int n,m,k,cnt,h[N];
long long dis[N<<2];
bool vis[N<<2];
struct node{
	int nx,to;
	long long w;
}e[N<<2];

void add(int a,int b,long long c){
	e[++cnt].nx=h[a]; e[cnt].to=b; e[cnt].w=c; h[a]=cnt;
}

void dj(int s){
	memset(dis,0x3f,sizeof dis);
	dis[s]=0;
	q.push(mp(0,s));
	while(q.size()){
		int x=q.top().second;
		int v=q.top().first;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;  dis[x]=v;
		for(int i=h[x];i;i=e[i].nx){
			int y=e[i].to;
			if(vis[y]) continue;
			dis[y]=min(dis[y],dis[x]+e[i].w);
			q.push(mp(dis[y],y));
		}
	}
}

int main(){
	scanf("%d%d%d",&n,&m,&k);
	while(m--){
		int a,b;
		long long c;
		scanf("%d%d%lld",&a,&b,&c);
		add(a,b,c); add(b,a,c);
		rep(i,1,k){
			add(a+(i-1)*n,b+i*n,0);
			add(b+(i-1)*n,a+i*n,0);
			add(a+i*n,b+i*n,c);
			add(b+i*n,a+i*n,c);
		}
	}
	rep(i,1,k){
		add(n+n*(i-1),n+n*i,0);
	}
	dj(1);
	printf("%lld",dis[n+n*k]);	
	return 0;
}

2023/8/2 12:09
加载中...