84分代码求调 WA on#1,#6 玄关
查看原帖
84分代码求调 WA on#1,#6 玄关
1121087
czy032321054楼主2024/7/24 15:23
#include<bits/stdc++.h>
using namespace std;
long long n,pri[1005],a,b,c,num[1005];//pri即最低价,num即方案数
bool vis[1005];
int m[1005][1005];
priority_queue<pair<int,int> >q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>pri[i],num[i]=1;
		m[1004][i]=i;
	}
	while(cin>>a>>b>>c){
		m[a+1][b+1]=c+1,m[b+1][a+1]=c+1;
	}
	q.push(make_pair(0,1004));
	while(q.size()){
		int x=q.top().second;
		q.pop();
		if(vis[x])continue;
		for(int i=1;i<=n;i++){
			if(m[x][i]==0||vis[i])continue;
			int k=m[x][i],v=i;
			if(pri[k]>pri[x]+pri[v]){
				pri[k]=pri[x]+pri[v];
				q.push(make_pair(-pri[k],k));
				num[k]=num[x]*num[v];
			}else if(pri[k]==pri[x]+pri[v]){
				q.push(make_pair(-pri[k],k));
				num[k]+=num[x]*num[v];
			}
		}
		vis[x]=1;//避免A=B的毒瘤情况产生
	}
	cout<<pri[1]<<" "<<num[1];
}
2024/7/24 15:23
加载中...