神秘bug
查看原帖
神秘bug
463210
zzzYheng楼主2021/1/9 12:06
#include<bits/stdc++.h>
using namespace std;
struct node{
	int d;
	int gas;
	int mon;
	friend bool operator <(node a,node b){
		a.mon<b.mon;
	}
};
int n,m;
int a[100005][3],last[1005],len=0;
int p[1005];
int qq;
int flag[1005][105];
void init(){
	for(int i=0;i<n;i++){
		a[i][0]=i;
		a[i][1]=-1;
		a[i][2]=0;
		last[i]=i;
	}
	len=n-1;
}
void f(int x,int id,int z){
	a[len+1][0]=x;
	a[len+1][1]=last[id];
	a[len+1][2]=z;
	last[id]=len+1;
	len++;
}
priority_queue<node> q;
int bfs(int c,int s,int e){
	memset(flag,0,sizeof(flag));
	int i,j; 
	node d1,d2;
	d1.d=s;d1.gas=0;d1.mon=0;
	q.push(d1);
	for(;!q.empty();){
		d1=q.top();q.pop();
		if(flag[d1.d][d1.gas]==1)continue;
		flag[d1.d][d1.gas]=1;
//		cout<<d1.d<<" "<<d1.gas<<" "<<d1.mon<<endl;
		if(d1.d==e){cout<<d1.mon<<endl;return 0;}
		if(d2.gas<c&&!flag[d1.d][d1.gas-1]){
			d2.d=d1.d;d2.gas=d1.gas+1;d2.mon=d1.mon+p[d1.d];
			q.push(d2);
		}
		for(i=last[d1.d];i!=-1;i=a[i][1]){
			if(d1.gas<a[i][2]||flag[d1.d][d1.gas-a[i][2]]==1)continue;
			d2.d=a[i][0];d2.gas=d1.gas-a[i][2];d2.mon=d1.mon;
			q.push(d2);
		}
	}
	cout<<"impossible"<<endl;
}
int main(){
	int i,j;
	cin>>n>>m;
	init();
	for(i=0;i<n;i++){cin>>p[i];}
	for(i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		f(x,y,z);
		f(y,x,z);
	}
	cin>>qq;
	for(i=1;i<=qq;i++){
		int c,s,e;
		cin>>c>>s>>e;
		bfs(c,s,e);
	}
	return 0;
}
2021/1/9 12:06
加载中...