90分求助
查看原帖
90分求助
485248
振衣千仞岗楼主2021/12/25 17:23
#include<set>
#include<list>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
#define min(a,b) a<b?a:b
inline int read() {
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
		s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
	return s*w;
}
inline void write(int x) {
	if(x>9)	write(x/10);
	putchar(x%10+'0');
}
inline void print(int x,char ch='\n') {
	if(x<0)putchar('-');
	write(__builtin_labs(x));
	putchar(ch);
}
int n,m,k,ans,cnt;
int head[1000001],Next[1000001],ver[1000001],edge[1000001],d[500001];
bool v[1000001],hp[1000001];
priority_queue<pair<int,int> >q;
void add(int z,int y,int x) {
	ver[++cnt]=y;
	edge[cnt]=z;
	Next[cnt]=head[x];
	head[x]=cnt;
//	swap(x,y);
//	ver[++cnt]=y;
//	edge[cnt]=z;
//	Next[cnt]=head[x];
//	head[x]=cnt;
}
int dij(int v0) {
	memset(d,0x3f,sizeof(d));
	memset(v,0,sizeof(v));
	while(!q.empty())q.pop();
	q.push(make_pair(0,v0));
	d[v0]=0;
	while(!q.empty()) {
		int x=q.top().second;
		q.pop();
		if(v[x])continue;
		if(hp[x]&&x!=v0) return d[x];
		v[x]=1;
		for(int i=head[x]; i; i=Next[i]) {
			int y=ver[i],z=edge[i];
			if(d[y]>d[x]+z) {
				d[y]=d[x]+z;
				q.push(make_pair(-d[y],y));
			}
		}
	}
	return 0x3f3f3f3f3f3f3f3f;
}
void memset(){
	memset(hp,0,sizeof(hp));
	memset(head,0,sizeof(head));
	memset(Next,0,sizeof(Next));
	memset(ver,0,sizeof(ver));
	memset(edge,0,sizeof(edge));
}
signed main() {
	for(int t=read(); t; t--) {
		n=read(),m=read(),k=read(),ans=0x7fffffffffffffff;
		memset();
		for(int i=1; i<=m; i++)add(read(),read(),read());
		for(int i=1; i<=k; i++)hp[read()]=1;
		for(int i=1;i<=n;i++)if(hp[i])ans=min(ans,dij(i));
		print(ans);
	}
	return 0;
}

为什么WA最后一个点

2021/12/25 17:23
加载中...