吸氧后82分WA求助!
查看原帖
吸氧后82分WA求助!
502707
2021hych楼主2023/7/22 12:16
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e6+10;
const int inf=1e18;
int T;
int n,m,k,x[N],y[N],z[N];
int a[N];
int ver[N],head[N],Next[N],edge[N],tot;
int s,t;
int d[N],vis[N];
priority_queue<pair<int,int> >q;
int ans;
int dijkstra() {
	while(!q.empty()) q.pop();
	for(int i=1;i<=n+2;i++) d[i]=inf,vis[i]=0;
	d[s]=0;
	q.push(make_pair(-d[s],s));
	while(!q.empty()) {
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[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 d[t];
}
void add(int x,int y,int z) {
	ver[++tot]=y;
	edge[tot]=z;
	Next[tot]=head[x];
	head[x]=tot;
}
void build_graph() {
	for(int i=1;i<=n+2;i++) ver[i]=head[i]=Next[i]=edge[i]=0;
	tot=0;
	for(int i=1;i<=m;i++) add(x[i],y[i],z[i]);
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--) {
		cin>>n>>m>>k;
		for(int i=1;i<=m;i++) cin>>x[i]>>y[i]>>z[i];
		s=n+1,t=n+2;
		ans=inf;
		for(int i=1;i<=k;i++) cin>>a[i];
		for(int i=0;(1<<i)<=k;i++) {
			build_graph();
			for(int j=1;j<=k;j++) {
				if(j&(1<<i)) add(s,a[j],0);
				else add(a[j],t,0);
			}
			ans=min(ans,dijkstra());
			build_graph();
			for(int j=1;j<=k;j++) {
				if((j&(1<<i))^1) add(s,a[j],0);
				else add(a[j],t,0);
			}
			ans=min(ans,dijkstra());
		}
		cout<<ans<<endl;
	}
	return 0;
}

第 33 和第 99 个点 WA\text{WA}。

2023/7/22 12:16
加载中...